2015-06-07 28 views
0

我在布尔模式下进行MySQL FULLTEXT搜索。根据说明书:mysql全文boolean NOT运算符

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.” 

的确如此。

所以我用的是不匹配操作是这样的:

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

+运算符表示搜索文字存在。每MySQL Documentation

MySQL可以使用IN布尔值模式 修饰符执行布尔全文搜索。使用此修饰符,某些字符在搜索字符串的单词的开头或结尾处具有特殊含义 。在 以下查询中,+-运算符表示一个字需要 为本或分别不存在

例如,下面的查询将检索所有包含的行这个词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)应该意味着让我所有的行,其中列的值不foobar。它应该是的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) 

说是得到其中列的值是富或酒吧

仔细检查文档中的所有行。它说

[无操作]暗示或明示

[+]和暗示

+0

谢谢,我读了。但我不明白这是什么意思,在非匹配请求的情况下。在请求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