Как выполнить поиск текста с помощью СОПОСТАВЛЕНИЯ…ПО запросу?

#mysql

#mysql

Вопрос:

Таблица

 id    name
---  ------
1    chinu
2    sanjib
3    chinmay
  

Мой запрос MYSQL

 SELECT * FROM users WHERE MATCH (name) AGAINST ('chi' IN BOOLEAN MODE)
  

В приведенном выше запросе я получаю 0 запись.

Мой вывод будет приходить

 1   chinu
3   chinmay
  

Как получить мою фактическую запись, используя MATCH…ПО запросу?

РЕДАКТИРОВАТЬ — Если я ищу chinu вместо chi, я получаю 1 запись.

Ответ №1:

Вам нужно добавить звездочку к ‘chi’, чтобы указать, что запрос должен соответствовать всем, которые содержат строку, а не только самой строке. Простое использование строки ‘chi’ будет точно соответствовать только ‘chi’, например.

измените свой запрос на чтение

  SELECT * FROM users WHERE MATCH (name) AGAINST ('chi*' IN BOOLEAN MODE)
  

и вы должны получить ожидаемые результаты.

Комментарии:

1. 1 . . . Это правильный ответ. Я оставляю свой ответ, потому что он также может оказаться полезным.

Ответ №2:

Я думаю, вы забыли знак:

 SELECT * FROM users WHERE MATCH (name) AGAINST (' chi' IN BOOLEAN MODE)
  

Или, если это точная фраза, используйте двойные кавычки, чтобы заключить строку:

 SELECT * FROM users WHERE MATCH (name) AGAINST ('"chi"' IN BOOLEAN MODE)
  

Ответ №3:

Я первый, кто признает, что это нелегко найти. Полнотекстовый поиск MySQL использует системную переменную с именем ft_min_word_length . Значение по умолчанию равно 4, как показано здесь.

Поскольку вы ищете слово из 3 символов, оно не индексируется. Следовательно, он не найден.

Более подробная информация доступна в документации по точной настройке поиска. Но основная идея заключается в том, что вам нужно изменить значение параметра и перестроить индекс.

Однако для вашего конкретного запроса вам просто нужно включить подстановочные знаки, как объясняется в других ответах.