отрицание с матчем против - PullRequest
1 голос
/ 12 мая 2011

Я хочу найти те строки, которые не содержат «Раджастхан» в поле состояния, используя сопоставление в MySql.

Мой запрос такой:

SELECT * from member where MATCH(state) AGAINST('-rajasthan' IN BOOLEAN MODE) 

Однако он возвращает пустой набор результатов.

В чем проблема с этим?

Ответы [ 2 ]

4 голосов
/ 12 мая 2011

Я верю, что это поможет:

SELECT 
  *
FROM 
  Member
WHERE 
  NOT MATCH (state) AGAINST ('+rajasthan' IN BOOLEAN MODE)

Источник: "Показать все, кроме" в булевых полнотекстовых поисках MySQL

Осторожно - я полагаю, что при этом будет выполнено полное сканирование таблицы, и этот запрос не получит выгоды от индекса FullText, как вы можете надеяться.

Что касается вашего пустого результата:

Примечание. Оператор - действует только для исключения строк, которые в других случаях сопоставляются с другими поисковыми терминами. Таким образом, поиск в логическом режиме, который содержит только термины с предшествующим - возвращает пустой результат. Он не возвращает «все строки, кроме тех, которые содержат какие-либо исключенные термины».

Источник

0 голосов
/ 12 мая 2011

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

Поэтому попробуйте добавить к вашему запросу OR 1 = 1, чтобы запрос возвращал все ваши записи без оператора MATCH

...