Mysql полнотекстовый поиск упорядочение по релевантности, а не по порядку, который я ищу (Соответствие фраз) - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть запрос ниже, и рейтинг релевантности, кажется, выключен.

Он оценивает

iPhone 5C Used Verizon 8GB 58165 White 

выше, чем

iPhone 8 Front Camera Flex

Как это выглядитделать это ранжирование, сколько раз он считает слова в фазе поиска.Я хочу повысить релевантность, если слова расположены рядом друг с другом (как показано выше)

SELECT phppos_items.name, MATCH (phppos_items.name) AGAINST ('iphone 8*' IN BOOLEAN MODE) as rel 
FROM phppos_items
WHERE MATCH (phppos_items.name) AGAINST ('iphone 8*' IN BOOLEAN MODE)
ORDER BY `rel` DESC;

Результаты (слишком большой для вставки)

https://gist.github.com/blasto333/d8f8fe470cc1cfb1f959922ea77f8134

1 Ответ

0 голосов
/ 16 февраля 2019

Давайте сначала проанализируем используемое вами условие, а также отсортируем по:

MATCH (phppos_items.name) AGAINST ('iphone 8*' IN BOOLEAN MODE)

Согласно Mysql Boolean Full-Text Searches , вы подходите для любых текстов, которые содержат ЛЮБОЙ слов:

  • iphone
  • 8

Значение любых текстов, которые имеют iphone ИЛИ 8 совпадают.

То, что вы хотите, это сопоставить " iphone 8 " как строку с приоритетом над "iphone" или "8".* ".

Для этого:

  • Добавить" iphone 8 * "в качестве строки для совпадения
  • , используя > <</em> операторов
  • и присваиваем ей приоритет над "iphone" и "8 *"

Измените запрос sql на:

AGAINST ('>"iphone 8*" >iphone <8*' IN BOOLEAN MODE)

в операторе выбора

означает, что он дает приоритет точному iphone 8 * и iphone над 8 *.

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