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
Внимательно проверьте документацию. Это говорит
[без оператора] подразумевает ИЛИ
[+] подразумевает И