match () против () не работает, но как '% $ s%' работает - PullRequest
0 голосов
/ 19 июня 2011

У меня есть полнотекстовое поле в моей таблице.Одна из строк:

"this is the dog that ran over there"

У меня есть следующие операторы mysql:

SELECT * 
  FROM `table` 
 WHERE MATCH (column) AGAINST ('dog that ran')

... возвращает 0 записей

SELECT * 
  FROM `table` 
 WHERE `column` LIKE '%dog that ran%'

... возвращает1 запись

Почему разница?Они оба должны вернуть 1 запись, верно?

1 Ответ

5 голосов
/ 19 июня 2011

Из моего ответа на другой вопрос :

У полнотекстового поиска есть некоторые причудливые причуды.

Например, поведение, описанное в последних параграфах этой страницы , может быть причиной вашей проблемы:

.... например, хотя слово «MySQL» присутствует в каждой строке таблицы статей, показанной ранее, поиск по слову не дает результатов:

mysql> SELECT * FROM articles
    -> WHERE MATCH (title,body) AGAINST ('MySQL');
 Empty set (0.00 sec)

Результат поиска пуст, поскольку слово «MySQL» присутствует как минимум в 50% строк. Как таковой, он эффективно рассматривается как стоп-слово. Для больших наборов данных это наиболее желательное поведение: запрос на естественном языке не должен возвращать каждую вторую строку из таблицы размером 1 ГБ. Для небольших наборов данных это может быть менее желательно.

Ответом здесь будет добавить больше строк или использовать логический поиск.

...