[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Двойные кавычки в MATCH AGAINST IN BOOLEAN MODE
Boolean_Type

$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"
}
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.