我一直在查看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"
有效吗? (我的测试建议如此,但它永远不会匹配任何东西。) 答案 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)
*有效,但即使匹配结果可用,搜索也会返回0结果。
SELECT a.*
FROM company a
WHERE a.active = 1 AND MATCH(a.company) AGAINST('"socia* media"' IN BOOLEAN MODE)
*有效,但即使匹配结果可用,搜索也会返回0结果。
SELECT a.*
FROM company a
WHERE a.active = 1 AND MATCH(a.company) AGAINST('"social medi*"' IN BOOLEAN MODE)