Расширенный поиск MySQL с помощью индекса FULLTEXT

mysql full-text-search

19 просмотра

1 ответ

Я хотел бы улучшить результаты моего полнотекстового запроса.

SELECT *, MATCH (winery) AGAINST ('chateau cheval blanc') AS score
FROM usr_wines
WHERE MATCH (winery) AGAINST ('chateau cheval blanc')
ORDER BY score DESC
...

Проблема в том, что показанные результаты таковы:

  • Шато Шеваль Блан Пети Шеваль
  • Замок Шеваль Блан

Я думаю, что MySQL возвращает "chateau cheval blanc petit cheval" раньше другого, потому что он нашел 2 вхождения "cheval" в строке. Но для меня второй результат должен отображаться перед первым, потому что он более точно соответствует тому, что запрашивается.

Я пробовал другие вещи, такие как «С ПОЛНЫМ РАСШИРЕНИЕМ» и «В БУЛЕВОМ РЕЖИМЕ», но безуспешно. Я также читал, что мы можем добавить знаки (+) в поиске, чтобы изменить поведение.

Ну, любая помощь приветствуется для получения соответствующего поведения.

Автор: alex.bour Источник Размещён: 29.10.2019 02:53

Ответы (1)


1 плюс

Решение

http://dev.mysql.com/doc/refman/5.6/en/fulltext-boolean.html

Вам просто нужно использовать IN BOOLEAN MODE с ", чтобы указать, что вы хотите точную фразу. Пример:

SELECT *, MATCH (winery) AGAINST ('"chateau cheval blanc"'  IN BOOLEAN MODE) AS score
FROM usr_wines
WHERE MATCH (winery) AGAINST ('"chateau cheval blanc"'  IN BOOLEAN MODE)
ORDER BY score DESC
Автор: Daniel E. Размещён: 04.04.2016 01:37
Вопросы из категории :
32x32