Полнотекстовый поиск в MySQL - несколько поисковых запросов, частичные поисковые запросы, с апострофом, без апострофа - PullRequest
0 голосов
/ 13 сентября 2018

У меня проблема с полнотекстовым поиском, который позволяет пользователю вводить: -

  • несколько условий поиска
  • несколько частичных условий
  • условия поиска сапострофы
  • условия поиска без апострофов

У меня поиск работает для всех, кроме одного экземпляра - когда пользователь вводит частичное условие поиска или полное условие поиска без апострофа.

В базе данных есть данные, сохраненные с помощью Bishop's Stafford (с апострофом) и Bishops Stafford (без апострофа) * ​​1016 *, и мне нужно получить все записи при поиске имени.

Для названия места Bishop's Stafford, hotel, suite

Если пользовательские ключи в Bishop's S, hotel, suite или любой другой версии Bishop's Stafford, содержащие апостроф - поиск будет работать

USE `waf-bit`;
SELECT townDetails FROM town_overview
WHERE MATCH(townDetails) against('+Bishop\'s S* +hotel +suite' IN BOOLEAN MODE) 
OR MATCH(townDetails) against('+Bishops S* +hotel +suite' IN BOOLEAN MODE) 
ORDER BY townDetails ASC LIMIT 50 OFFSET 0

Если, однако, пользовательские ключи в отеле Bishops S, люксе или любой другой версии Bishops Stafford без апострофа - поиск не будетрк, он не найдет версию Bishop's Stafford с апострофом.

USE `waf-bit`;
SELECT townDetails FROM town_overview
WHERE MATCH(townDetails) against('+Bishops S* +hotel +suite' IN BOOLEAN MODE) 
OR MATCH(townDetails) against('+Bishops S* +hotel +suite' IN BOOLEAN MODE) 
ORDER BY townDetails ASC LIMIT 50 OFFSET 0

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

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

1 Ответ

0 голосов
/ 13 сентября 2018

Я предлагаю использовать операцию UNION для этих двух запросов. UNION также автоматически удалит дубликаты (вы должны использовать UNION ALL, чтобы увидеть дубликаты)

...