Mysql полнотекстовый поиск не может найти слово - почему? - PullRequest
4 голосов
/ 01 декабря 2011

(mysql 5.1.36)

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

Легко воспроизвести:

CREATE TABLE `test`( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , `word` TEXT NOT NULL , PRIMARY KEY (`id`) ); 
ALTER TABLE `test` ADD FULLTEXT `NewIndex1` (`word`);
INSERT INTO `test`(`id`,`word`) VALUES ( NULL,'three');
INSERT INTO `test`(`id`,`word`) VALUES ( NULL,'thorn');

Затем выполните эти запросы:

SELECT * FROM test WHERE word='three';

результат = [1, 'три']

SELECT word FROM test WHERE MATCH(word) AGAINST ('three*' IN BOOLEAN MODE );

результат = []

SELECT word FROM test WHERE MATCH(word) AGAINST ('three' IN BOOLEAN MODE);

результат = []

SELECT word FROM test WHERE MATCH(word) AGAINST ('thre*' IN BOOLEAN MODE );

результат = []

SELECT word FROM test WHERE MATCH(word) AGAINST ('thorn*' IN BOOLEAN MODE )

result = [2, 'thorn']

SELECT word FROM test WHERE MATCH(word) AGAINST ('thorn' IN BOOLEAN MODE)

result = [2, 'thorn']

SELECT word FROM test WHERE MATCH(word) AGAINST ('thor*' IN BOOLEAN MODE)

result = [2, 'thorn']

Почему полнотекстовый поиск по запросу "три" не дает результатов?

Ответы [ 2 ]

7 голосов
/ 01 декабря 2011

Поскольку три является стоп-словом, полный текст будет игнорировать слово и не вернет никакого результата, связанного со словом «три».В основном, стоп-слова присутствуют для повышения производительности и не возвращают каждую строку, содержащую такие слова, как «есть, есть, будет ...».Вот список стоп-слов , отметьте их.

2 голосов
/ 01 декабря 2011

Чтобы добавить к ответу выше: Если вы хотите добавить стоп-слова для полнотекстовой индексации, просто добавьте это в ваш файл .cnf, перезапустите движок MySQL и пересоберите индексы: ft_stopword_file = "" Я добавлю к этому, если у вас нетне уменьшайте минимальное слово до 3 (ft_min_word_len=3), чтобы можно было искать трехбуквенные слова.

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