【问题标题】:mysql fulltext boolean NOT operatormysql全文布尔NOT运算符
【发布时间】:2015-08-22 03:51:32
【问题描述】:

我正在布尔模式下进行 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 字段中 + 运算符的作用是什么:是

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

同:

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

谢谢

【问题讨论】:

    标签: mysql full-text-search not-operator


    【解决方案1】:

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

    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) 应该意味着让我得到列值不是foobar 的所有行。它应该是WHERE MATCH (column) AGAINST ('+foo +bar' IN BOOLEAN MODE) 中的negation

    是的,两者都不一样。

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

    表示获取列值为 foo 和 bar 的所有行

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

    表示获取列值为 foo 或 bar 的所有行

    仔细检查文档。它说

    [无运算符]暗示或

    [+] 表示与

    【讨论】:

    • 谢谢,我读到了。但我不明白在 NOT MATCH 请求的情况下它意味着什么。在 WHERE NOT MATCH (column) AGAINST ('+foo +bar' IN BOOLEAN MODE) 请求中:这是否意味着 foo 和 bar 都不能在列条目中?如果这样做,那么它应该与 WHERE NOT MATCH (column) AGAINST ('foo bar' IN BOOLEAN MODE) 相同。但不一样。
    猜你喜欢
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 2011-03-27
    相关资源
    最近更新 更多