如何在MySQL的布尔模式下使用运算符?

时间:2014-05-06 11:11:34

标签: mysql search operators

我一直在查看MySQL documentation中布尔全文搜索的示例,他们并没有给我足够的信息来自信地与运算符(特别是+,{ {1}}和-)结合短语(与单个单词相对)。关于使用布尔模式,StackOverflow上有很多问题,但它们都非常具体。

MySQL布尔全文搜索文档中没有任何内容表明运算符是否(如果是,如何)运算符可以与短语结合使用。例如,当我使用以下查询时,MySQL不会抱怨:

*

这表明语法有效,但它会返回在标题或说明中的任何位置包含“customer”一词的匹配项!所以加号显然没有达到预期的效果。

所以我的问题可以改写一下:使用带有短语的运算符的规则是什么?

子问题包括:

  • SELECT * AS relevance FROM deliverables WHERE MATCH(title,description) AGAINST('+"customer engagement" vendor' IN BOOLEAN MODE) 有效吗? (我的测试建议如此,但可能会忽略+"some phrase"。)
  • +有效吗? (我的测试建议如此,它似乎按预期工作。)
  • -"some phrase"有效吗? (我的测试建议如此,但它永远不会匹配任何东西。)
  • "som* phrase"有效吗? (我的测试建议如此,但它永远不会匹配任何东西。)

2 个答案:

答案 0 :(得分:0)

如果要匹配3个单词,请使用以下语法:

SELECT * FROM deliverables 
WHERE MATCH(title,description) 
AGAINST('+word1 +word2 +word3' IN BOOLEAN MODE);

如果想要匹配1个短语,请使用以下语法:

AGAINST('"THIS IS MY"' IN BOOLEAN MODE);

如果想要2个短语中任何一个的结果,请使用以下语法:

AGAINST('"THIS IS MY" "I AM NOT"' IN BOOLEAN MODE);

如果您想获得任何具体结果,请分享,如果让我知道您想要的结果,那么我可以更好地帮助您。

答案 1 :(得分:0)

我最近也在对此进行测试并遇到了您的问题。使用MySQL 5.5并测试您的4个条件,我看到以下结果:

+“某些短语”是否有效?

忽略+符号,如果包括或不包含相同的结果集。

SELECT a.*
FROM company a
WHERE a.active = 1 AND MATCH(a.company) AGAINST('+"social media"' IN BOOLEAN MODE)

是 - “某些短语”有效吗?

- 符号有效,但即使匹配结果可用,搜索也会返回0结果。

SELECT a.*
FROM company a
WHERE a.active = 1 AND MATCH(a.company) AGAINST('-"social media"' IN BOOLEAN MODE)

“som *短语”是否有效?

*有效,但即使匹配结果可用,搜索也会返回0结果。

SELECT a.*
FROM company a
WHERE a.active = 1 AND MATCH(a.company) AGAINST('"socia* media"' IN BOOLEAN MODE)

“some phra *”有效吗?

*有效,但即使匹配结果可用,搜索也会返回0结果。

SELECT a.*
FROM company a
WHERE a.active = 1 AND MATCH(a.company) AGAINST('"social medi*"' IN BOOLEAN MODE)