#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 символов, оно не индексируется. Следовательно, он не найден.
Более подробная информация доступна в документации по точной настройке поиска. Но основная идея заключается в том, что вам нужно изменить значение параметра и перестроить индекс.
Однако для вашего конкретного запроса вам просто нужно включить подстановочные знаки, как объясняется в других ответах.