Поиск полнотекстового поиска в режиме естественного языка - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь выполнить полнотекстовый поиск в mysql. Я ожидаю, что при передаче строки я получу ранжирование по релевантности при использовании [Режим естественного языка] mysql - полнотекстовый индекс - что такое режим естественного языка .

Здесь Вот как я создал индекс: CREATE FULLTEXT INDEX item_name ON list_items(name);

Когда я использую LIKE, я получаю результаты, за исключением того, что я хочу упорядочить их по релевантности. Следовательно, полнотекстовый поиск.

Вот запрос, который я использую LIKE: SELECT name FROM list_items WHERE name LIKE "%carro%";, что приводит к Carrots, Carrots, Carrots et c.

Вот запрос, который я пытался выполнить MATCH поиск: SELECT name FROM list_items WHERE MATCH(name) AGAINST('carro' IN NATURAL LANGUAGE MODE); Что не дает результатов.

Я основываю свой запрос на выбранном ответе на этот пост: Порядок SQL по сильнейшему НРАВИТСЯ? И эта страница: https://www.w3resource.com/mysql/mysql-full-text-search-functions.php

Даже когда я запускаю запрос без режима естественного языка или даже в булевом режиме, я не получаю никаких результатов. Чего мне не хватает?

1 Ответ

1 голос
/ 29 апреля 2020

Вы, похоже, хотите использовать * в качестве подстановочного знака. Для этого вам нужно использовать «логический» режим, а не «естественный язык». Таким образом, это может сделать то, что вы хотите:

SELECT name
FROM list_items
WHERE MATCH(name) AGAINST('carro*' IN BOOLEAN MODE)

Это по-прежнему дает рейтинг релевантности, хотя может не совпадать с режимом естественного языка.

Также обратите внимание, что это получит совпадения, такие как "carrouse".

Я не думаю, что MySQL поддерживает списки синонимов для полнотекстового поиска, поэтому этого сложно избежать (хотя like фильтрации вместе с полнотекстовой фильтрацией может быть достаточно ).

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