MySQL полный текст логический оператор НЕ

Я делаю поиск MySQL FULLTEXT в логическом режиме. Согласно инструкции:

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);

Мой вопрос: каков эффект оператора + в поле NOT MATCH: is

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

такой же как:

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

Спасибо

1 ответ

+ Оператор означает, что поисковый литерал присутствует. Согласно документации MySQL

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

Например, приведенный ниже запрос извлечет все строки, содержащие слово MySQL но это не содержит слово YourSQL

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

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

РЕДАКТИРОВАТЬ:

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 и bar

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

Говорит, что получают все строки, где значения столбца foo или bar

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

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

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

Другие вопросы по тегам