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

0

Я хотел бы выполнить полнотекстовый поиск по столбцу, ища частичное совпадение слов (IE: against('fra*' in boolean mode)). Но я хотел бы получить результаты, которые присваивают более высокую релевантность более коротким словам, которые соответствуют.

Итак, например, если я выполняю поиск "fra" и получаю результаты "откровенный" , "fran" и "frankfurter", я бы хотел, чтобы они были упорядочены с точки зрения релевантности следующим образом: "fran", "откровенный" , "откровенный" .

Возможно ли, что это может быть достигнуто?

Теги:
full-text-search

1 ответ

1
Лучший ответ
SELECT 
token FROM tokentable 
WHERE token LIKE '%fra' 
ORDER BY CHAR_LENGTH(token) ASC

чтобы заполнить ваш пример, очень быстро, а также из-за индексации btree. вы также можете сделать:

SELECT 
document FROM documents
WHERE document LIKE '%frankfurter%' 
AND document LIKE '%würstel%' 
ORDER BY CHAR_LENGTH(document) ASC

но это, вероятно, бессмыслица расчета релевантности.

простой ответ: если вы только выполняете автосуществование на основе префикса, метод выше - это хорошо. theres нет необходимости использовать матч против. если вы хотите искать полнотекстовый поиск, вы не можете сделать это с такими критериями, вы должны посмотреть на lucene/solr

Ещё вопросы

Сообщество Overcoder
Наверх
Меню