Полнотекстовый поиск в Mysql - нелогичное поведение - PullRequest
1 голос
/ 05 августа 2010

Я получаю результаты, которые трудно понять. Я надеюсь, что кто-то сможет пролить свет на эту тему.

У меня очень простая таблица в MySQL:

id| text
1 | testA testB testC
2 | testA testB

Когда я запускаю следующий запрос:

SELECT id,  MATCH (text) AGAINST ('+(+testA testB) +testC' IN BOOLEAN MODE) as score FROM test_fulltext 

Я получаю следующие неправильные результаты (обратите внимание, что вторая строка должна вернуть 0)

id| score
1 | 1,1666667461395
2 | 0,66666668653488

Однако когда я запускаю слегка измененную версию запроса (без знака «+» перед testA):

SELECT id,  MATCH (text) AGAINST ('+(testA testB) +testC' IN BOOLEAN MODE) as score FROM test_fulltext 

Я получаю правильный результат:

id| score
1 | 1,3333333730698
2 | 0

У вас есть идея, почему первый запрос соответствует второй строке? Он делает это как на MySQL 4.1, так и на 5.0.5.

Знаете ли вы, где я могу найти исходный код, который анализирует полнотекстовые запросы? Или любой другой источник информации, который объясняет, как это рассчитывается. Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 05 августа 2010

Похоже, что это известная ошибка, присутствующая во всех версиях mysql. http://bugs.mysql.com/bug.php?id=36384

0 голосов
/ 05 августа 2010

Вы можете проверить официальный документ:

http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html

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