Соответствие полнотекстового поискового запроса MySQL ВСЕ слова по-прежнему возвращают частичные совпадения - PullRequest
0 голосов
/ 13 мая 2018

У меня та же проблема, что и на этом плакате , однако принятый ответ не решил мою проблему. По сути, я пытаюсь сопоставить свой столбец «заголовок» со ВСЕМИ словами в полнотекстовом поисковом запросе, но он все еще возвращает частичные совпадения. Я недавно перенес свои таблицы базы данных MySQL на новый веб-хост, и мой полнотекстовый поиск работает не так, как на моем старом сервере. Я предполагаю, что может быть разница в настройках, но я не могу найти ее. Полный текст включен, мой ft_min_word_len установлен на 3, и все же следующий запрос MySQL все еще собирает частичные совпадения:

SELECT title, MATCH (title) AGAINST ("more pink") AS relevance
FROM discography
WHERE MATCH (title) AGAINST ("+more +pink" IN BOOLEAN MODE)
ORDER BY relevance DESC

Приведенный выше код возвращает указанный ниже набор, первые 7 заголовков:

Under The Pink & More Pink
Under The Pink Tour All Pass
Under The Pink Tour Guest Pass
Under The Pink Tour Aftershow Pass
Under The Pink Tour After Show Pass
Under The Pink
Under The Pink

Как я могу опустить частичные совпадения? Я что-то упускаю? Результаты будут еще хуже, если я переведу инструкцию SELECT в логический режим, поскольку это устанавливает релевантность в двоичную 1 или 0:

SELECT title, MATCH (title) AGAINST ("+more +pink" IN BOOLEAN MODE) AS relevance
FROM discography
WHERE MATCH (title) AGAINST ("+more +pink" IN BOOLEAN MODE)
ORDER BY relevance DESC

Первые 7 названий:

Under The Pink
Under The Pink
Under The Pink
Under The Pink
Under The Pink
Under The Pink
Under The Pink & More Pink

Несмотря на использование оператора +, он, похоже, не сужает мои результаты. Любая помощь будет приветствоваться, большое спасибо заранее.

1 Ответ

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

Ну, теперь я чувствую себя глупо.Моя таблица использует MyISAM, и, согласно документации, «more» находится в списке стоп-слов.Вот почему этот поиск набирает частичные совпадения.Спасибо всем за помощь.

РЕДАКТИРОВАТЬ

Если кому-то интересно, как «обойти» список стоп-слов на виртуальном хостинге при программировании собственной поисковой системы на вашем сайте, я рекомендую аналогичную техникучто я использовал, чтобы обойти мою настройку "ft_min_word_len".Создайте отдельный столбец поиска, в котором будут сохранены дубликаты всех значений в столбце или столбцах, в которых вы хотите выполнять поиск по полному тексту.Создайте включаемый файл, в котором все стоп-слова , перечисленные для типа вашей базы данных , сохранены в массиве.Перед сохранением значений в выделенном поисковом столбце прокрутите каждое отдельное слово в значениях столбца и проверьте, существует ли какое-либо из них в массиве стоп-слов, используя файл включения.Если какие-либо значения включают в себя стоп-слова, добавьте символ в конце стоп-слова (я выбрал «z»).Затем, когда поиск инициирован, выполните цикл поиска по одному и тому же массиву стоп-слов и проверьте, есть ли в нем стоп-слова.Если в массиве стоп-слов есть какие-либо искомые слова, еще раз добавьте тот же символ, который вы выбрали для добавления в конец стоп-слов в столбце поиска (в данном случае «z»).После циклического перемещения по массиву и внесения необходимых изменений в условия поиска вы можете выполнять поиск в выделенном столбце поиска, не опасаясь, что ваши стоп-слова будут проигнорированы.Конечно, я не использую свой столбец поиска для каких-либо целей отображения, только для поиска.

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