полнотекстовый поиск ничего не находит

**ИЗМЕНИТЬ**

Итак, я нашел проблему, она заключалась в том, что минимальная длина слова для поиска была 4, я изменил ее на 3, но теперь она находит только данные строки 1, а не данные строки 2...

-----исходный вопрос:----

У меня есть таблица MyISAM в моем phpmyadmin, например:

table name: `users`
coulmn name: `name`
row 1 data: 'dan'
row 2 data: 'dan252'

(это просто важная часть)

теперь имя является полем полнотекстового индекса, я использую этот запрос:

SELECT * FROM `users` WHERE MATCH(`name`) AGAINST('dan')

но phpmyadmin возвращает:

MySQL returned an empty result set (i.e. zero rows). ( Query took 0.0004 sec )

почему ничего не находит?

*ИЗМЕНИТЬ*

Итак, я нашел проблему, она заключалась в том, что минимальная длина слова для поиска была 4, я изменил ее на 3, но теперь она находит только данные строки 1, а не данные строки 2...


person Dan Barzilay    schedule 11.06.2012    source источник


Ответы (3)


MATCH работает только со столбцами с индексом FULLTEXT. И FULLTEXT указание работает только для таблиц MyISAM.

Во-вторых, 'dan', вероятно, слишком короткий использовать на MATCH.

В-третьих, если ваш поисковый запрос соответствует более чем 50% ваших строк, этот термин считается слишком распространенным, и поиск не выполняется.

Прочтите здесь.

person dnagirl    schedule 11.06.2012

Попробуй это.

SELECT * FROM users WHERE MATCH (name) AGAINST ('dan');

Я предполагаю, что вы используете апострофы для имени таблицы и в ПОИСКПОЗ. Это не правильно. Попробуйте и дайте мне знать, если это работает.

person Krishna    schedule 11.06.2012

Я предполагаю, что вы пытаетесь вернуть все с «dan» в них. Вы можете попробовать команду LIKE.

SELECT * FROM users WHERE name LIKE '%dan%'

Это вернет «dan» и «dan252» и (если он был в таблице) «123dan456».

Вы также можете попробовать

SELECT * FROM users Match(name) AGAINST('+dan*')

Это должно вернуть то же самое и, вероятно, более эффективно. Если вы пытаетесь использовать только «дан», используйте, как говорит @Kirishna.

SELECT * FROM users WHERE MATCH (name) AGAINST ('dan')
person Jonathan    schedule 11.06.2012
comment
я хочу использовать полный текст, а не LIKE, первый возвращает синтаксическую ошибку, а второй возвращает пустой результат - person Dan Barzilay; 11.06.2012
comment
Вы можете попробовать SELECT * FROM users WHERE CONTAINS(name,"dan") я взял это из Microsoft SQL, так что это может не Работа. - person Jonathan; 11.06.2012