2016-09-02 4 views
0

Для небольшого и простого инструмента поиска на моем сайте я использую MySQL MATCH AGAINST для поиска наиболее релевантных строк на основе поискового запроса. Теперь я использую этот запрос:Поиск в MySQL соответствует части слова

SELECT * FROM mytable WHERE MATCH (name,description) AGAINST ('".$term."*' IN BOOLEAN MODE) 

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

Я уже проверил Документы, но я не могу найти решение. Раньше кто-то сталкивался с этим?

+0

Это невозможно. Думаю об этом. С этим: '' ". $ Term." * * Вы определили, что если поиск начинается с '' systems * '', тогда он покажет вам все записи, что началось с' systems' и '' systemstools'' , и т. д. Как mysql должен выяснить, что вам нужно '' система ', если вы дадите поисковый запрос 's' в конце? – vaso123

+0

Я понимаю. Но как это можно сделать? – Mikelo

+0

Вырезать последнюю или последнюю букву или использовать первые 3 слова, я не знаю, какова ваша логика. – vaso123

ответ

0

Это немного длинный комментарий.

То, о чем вы просите, обычно реализуется одним из двух способов в полнотекстовой поисковой системе. Более распространенным методом является список синонимов терминов. Это позволит вам сказать, что «система» и «системы» - это одно и то же.

Насколько я знаю, MySQL не поддерживает списки синонимов. Вы можете реализовать их самостоятельно, громоздким образом, путем предварительной обработки данных или запросов, чтобы заменить значения синонимов.

Второй подход называется остановкой. Это превращает слова в их «корневую» форму, поэтому «системы» будут распознаваться как множественное число «системы», и они будут совпадать. Stemming может применяться только в запросе. Или, по-настоящему амбициозным, он может применяться и на стороне хранения документов. Проблема в том, что есть двусмысленность. Английский (и другие языки) заполнены исключениями, в тех случаях, когда ограничение не имеет смысла.

Смежные вопросы