MYSQL полнотекстовое совпадение не возвращает ожидаемый результат - PullRequest
0 голосов
/ 01 мая 2018

Я создал таблицу MYSQL, используя следующий запрос:

CREATE TABLE IF NOT EXISTS `test` (
   `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
   `name` VARCHAR(255) NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY (`name`),
    FULLTEXT INDEX(`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

И иметь следующие строки:

   id | name
   ----------
    1 | Acer Liquid Z6 Plus
    2 | Acer Liquid Z6
    3 | Acer Liquid X2

Я хочу использовать запрос MATCH для поиска Acer Liquid Z6, поэтому я запустил следующий запрос:

SELECT * FROM `test` WHERE MATCH(name) AGAINST('acer liquid z6' IN NATURAL LANGUAGE MODE)

Запрос по какой-то причине возвращает Acer Liquid Z6 Plus в качестве первого результата:

   id | name
   ----------
    1 | Acer Liquid Z6 Plus
    2 | Acer Liquid Z6
    3 | Acer Liquid X2

Таким образом, полнотекстовый индекс не возвращает сначала наиболее релевантный результат. Есть ли более надежный способ поиска в индексе или принудительного соответствия, чтобы сначала получить наиболее релевантный результат?

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Это не проблема. Полнотекстовый поиск сопоставляет слова с заданными вами столбцами, поскольку первая строка соответствует словам, которые добавляются в список результатов или массив. Хранились ли ваши данные вот так

id | Имя


1 | Acer Liquid Z6
2 | Acer Liquid Z6 Plus
3 | Acer Liquid X2

Тогда первый возвращенный ряд будет Acer Liquid Z6.

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

0 голосов
/ 01 мая 2018

Когда MySQL строит полнотекстовый индекс, он не индексирует все слова. Существует несколько различных параметров - что определяет границу слова, какие символы допускаются в слове. И два самых важных:

  • Минимальная длина слова
  • Список стоп-слов

Минимальная длина слова составляет 3 или 4, в зависимости от механизма хранения. В любом случае 'z6' будет игнорироваться. Документация - хорошее место для понимания этих параметров.

Вам потребуется установить для параметра соответствующее значение и перестроить индекс.

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