2015-06-07 3 views
0

Я выполняю поиск MySQL FULLTEXT в булевом режиме. В соответствии с руководством:mysql fulltext boolean NOT operator

Note: The - operator acts only to exclude rows that are otherwise 
matched by other search terms. Thus, a boolean-mode search that 
contains only terms preceded by - returns an empty result. It 
does not return “all rows except those containing any of the 
excluded terms.” 

Это правда.

Поэтому я использую оператор NOT MATCH, как это:

SELECT COUNT(*) FROM Table WHERE MATCH (Column) AGAINST 
('bar' IN BOOLEAN MODE) AND NOT MATCH (Column) AGAINST 
('barbar' IN BOOLEAN MODE); 

Мой вопрос: каков эффект оператора + в поле не совпадают: это

AND NOT MATCH (Column) AGAINST ('foo bar' IN BOOLEAN MODE) 

так же, как :

AND NOT MATCH (Column) AGAINST ('+foo +bar' IN BOOLEAN MODE) 

Благодаря

ответ

1

Оператор + означает, что имеется литерал поиска. Per MySQL Documentation

MySQL может выполнять булевы полнотекстового поиска с использованием модификатора IN BOOLEAN MODE, . С помощью этого модификатора определенные символы имеют специальное значение в начале или конце слов в строке поиска. В следующем запросе + и - операторы указывают, что слово требуется быть присутствует или отсутствует, соответственно,

Например, ниже запроса будет извлекает все строки, содержащие слово MySQL но не содержат слово YourSQL

SELECT * FROM articles WHERE MATCH (title,body) 
AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE); 

+ Значок ведущего плюса указывает, что это слово должно присутствовать в каждой строке , которая возвращается.

EDIT:

WHERE NOT MATCH (column) AGAINST ('+foo +bar' IN BOOLEAN MODE) должен означать, принесите мне все строки, где значение столбца не foo и bar. он должен быть negation от WHERE MATCH (column) AGAINST ('+foo +bar' IN BOOLEAN MODE)

Да, оба не одинаковы.

WHERE MATCH (column) AGAINST ('+foo +bar' IN BOOLEAN MODE) 

говорит, что получить все строки, в которых значение столбца являются Foo и бар

WHERE MATCH (column) AGAINST ('foo bar' IN BOOLEAN MODE) 

говорит, что получить все строки, в которых значение столбца являются Foo или BAR

Тщательно проверьте документацию.Это говорит

[нет оператора] следует ИЛИ

[+] подразумевает И

+0

Спасибо, я прочитал, что. Но я не понимаю, что это значит в случае запроса NOT MATCH. В запросе WHERE NOT MATCH (column) AGAINST ('+ foo + bar' IN BOOLEAN MODE): означает ли это, что ни foo, ни bar не могут быть в столбцах? Если это так, то оно должно быть таким же, как WHERE NOT MATCH (column) AGAINST ('foo bar' IN BOOLEAN MODE). Но это не одно и то же. – thiebo

+0

@thiebo. см. в моем ответе, если это поможет. – Rahul

 Смежные вопросы

  • Нет связанных вопросов^_^