Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Двойные кавычки в MATCH AGAINST IN BOOLEAN MO (Boolean_Type) 15/07/2014 - 17:45:53



From: Boolean_Type - 15/07/2014 - 17:45:53
Subject:Двойные кавычки в MATCH AGAINST IN BOOLEAN MO
-----------------
$db = mysqli_connect('localhost', 'root', '');
$res = mysqli_query($db, 'CREATE DATABASE IF NOT EXISTS publications;');
$res = mysqli_query($db, 'USE publications;');
$res = mysqli_query($db, 'CREATE TABLE IF NOT EXISTS classics (author VARCHAR(128), title VARCHAR(128), type VARCHAR(16), year CHAR(4));');
//заполнение таблицы
$res = mysqli_multi_query($db, "INSERT INTO classics (author, title, type, year) VALUES ('Mark Twain','The Adventures of Tom Sawyer','Fiction','1876');
INSERT INTO classics (author, title, type, year)
VALUES ('Jane Austen','Pride and Prejudice','Fiction','1811');
INSERT INTO classics (author, title, type, year)
VALUES ('Charles Darwin','The Origin of Species','Non-Fiction','1856');
INSERT INTO classics (author, title, type, year)
VALUES ('Charles Dickens','The Origin out Shop','Fiction','1841');
INSERT INTO classics (author, title, type, year)
VALUES ('William Shakespeare','Romeo and Juliet','Play','1594');");

while (mysqli_next_result($db)) {} //просто проходимся по всем рез-там, чтобы дальше было возм-ым осущ-влять запросы

mysqli_query($db, "ALTER TABLE classics ENGINE = MyISAM;"); //смена движка для поддержки FULLTEXT
mysqli_query($db, "ALTER TABLE classics ADD FULLTEXT(author, title);"); //задаю составной FULLTEXT (author, title)

//НЕПОНЯТНОСТЬ:
//здесь - http://www.mysql.ru/docs/man/Fulltext_Search.html написано:
//"Фраза, заключенная в двойные кавычки, соответствует только строкам, содержащим эту фразу, написанную буквально."
//Также приведён пример:
//"some words" - найдёт "some words of wisdom", но не "some noise words", что говорит об участии в поиске стоп-слов.
//Кроме того, в книге, откуда взят этот пример (Р. Никсон), приводится строка кода, написанная ниже:
$res = mysqli_query($db, 'SELECT title FROM classics WHERE MATCH (title) AGAINST("Origin of" IN BOOLEAN MODE);');
//При этом относительно этой строки отмечено: "частью искомой строки является стоповое слово of, но оно все же ИСПОЛЬЗУЕТСЯ в поиске, поскольку двойные кавычки
//ОТМЕНЯЮТ учет стоповых слов".
# Если верить этому, то запрос должен вернуть лишь "The Origin of Species", т.к. только эта строка содержит буквально написанное "Origin of". Но возвращается также
# и "The Origin out Shop", хотя здесь нет буквального "Origin of"! Я понимаю, что "of" - стоп-слово, но почему же автор пишет, что оно исп-ется в поиске?
# Я заменил двойные кавычки одинарными - рез-т тот же. Может, что-то не так с настройками MySQL? Ведь не зря же автор так написал.
var_dump(mysqli_fetch_all($res, MYSQLI_ASSOC));

Output:
array(2) {
[0]=>;
array(1) {
["title"]=>;
string(21) "The Origin of Species"
}
[1]=>;
array(1) {
["title"]=>;
string(19) "The Origin out Shop"
}
}


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
43159



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |