MySQL полнотекстовый поиск всегда имеет 0 результатов? - PullRequest
4 голосов
/ 09 ноября 2010

Я прочитал, что использование полнотекстового поиска быстрее, чем использование LIKE %%.Я обновил свой сценарий, но всегда кажется, что результат всегда равен 0.

SELECT *,
MATCH(pages) AGAINST('doodle') AS score
FROM books
WHERE MATCH(pages) AGAINST('doodle')
ORDER BY score DESC 

Ключевое слово $ длиннее 4 символов, и я проиндексировал столбец страниц как полный текст.У меня есть "каракули" в столбце страниц в этом формате "Янки каракули".

Я также пытался это

SELECT *,
MATCH(pages) AGAINST ('doodle' IN BOOLEAN MODE) AS score 
FROM books 
WHERE MATCH(pages) AGAINST ('doodle' IN BOOLEAN MODE)"; 

Ни один из них не работает: \

1 Ответ

13 голосов
/ 09 ноября 2010

У полнотекстового поиска есть некоторые причудливые причуды.

Например, поведение, описанное в последних параграфах на этой странице , может быть причиной вашей проблемы:

.... например, хотя слово «MySQL» присутствует в каждой строке таблицы статей, показанной ранее, поиск слова не дает результатов:

mysql> SELECT * FROM articles
    -> WHERE MATCH (title,body) AGAINST ('MySQL');
 Empty set (0.00 sec)

Результат поиска пуст, поскольку слово «MySQL» присутствует как минимум в 50% строк. Как таковой, он эффективно рассматривается как стоп-слово. Для больших наборов данных это наиболее желательное поведение: запрос на естественном языке не должен возвращать каждую вторую строку из таблицы размером 1 ГБ. Для небольших наборов данных это может быть менее желательно.

Ответом здесь будет добавление дополнительных строк или использование логического поиска.

Если вам нужны взвешенные результаты поиска, ознакомьтесь с комментарием Posted by John Craig on December 16 2009 7:01pm на связанной странице для предложения обходного пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...