Полнотекстовый поиск MySQL не может найти ни одной орфографической ошибки

0

У меня есть запрос на полный текст, который, похоже, работает с орфографическими ошибками, если я использую 2 слова, но это не так, если я использую только одно слово

У меня есть таблица с полем fullname

И в таблице "Нил Роджерс", "Бам Роджерс", "Кэтрин Вин Роджерс", "Найджел Роджерс",

мой запрос

SELECT *
FROM people
WHERE MATCH (fullname) AGAINST ('myquerytext' IN NATURAL LANGUAGE MODE)

если я ищу "Роджерса", я нашел "Нил Роджерс"

если я ищу "Роджерса", я нашел "Бам Роджерс", "Кэтрин Вин Роджерс", "Найджел Роджерс", НО НЕ "Нил Роджерс",

если я ищу "Нил Роджерс", я люблю "Нил Роджерс", "Бам Роджерс", "Кэтрин Вин Роджерс", "Найджел Роджерс",

Можно ли настроить допуск?

  • 1
    Я думаю, что 'Nile Rogers' возвращает все записи не потому, что MySQL обрабатывает альтернативные варианты написания, а потому, что все записи соответствуют одному из этих двух токенов. См. Stackoverflow.com/questions/7200935/… . Если вы хотите обрабатывать альтернативные орфографические / орфографические ошибки в MySQL, вы можете сделать что-то вроде создания индекса SOUNDEX. Если переключение СУБД является опцией, Postgres имеет встроенную поддержку n-граммы слова, которую вы можете использовать для сравнения слова с его ошибочным эквивалентом.
Теги:

1 ответ

0

Ваша проблема в том, что он ищет EITIER Nile OR Rogers, и поэтому результаты, которые вы получаете, логичны.

Если вы хотите ВСЕ слова, а не ЛЮБОЙ из них, используйте BOOLEAN MODE и добавьте + перед каждым словом:

SELECT *
FROM people
WHERE MATCH (fullname) AGAINST ('+Nile +Rogers' IN BOOLEAN MODE)

12.9.2 Логические полнотекстовые поисковые запросы

При реализации этой функции MySQL использует то, что иногда называют логической логикой, в которой

• + обозначает И

• - означает НЕ

• [нет оператора] подразумевает ИЛИ

Оффициальный документ

Ещё вопросы

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