Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL';什么是布尔模式?_Mysql_Search_Operators - Fatal编程技术网

在MySQL';什么是布尔模式?

在MySQL';什么是布尔模式?,mysql,search,operators,Mysql,Search,Operators,我一直在浏览MySQL中的布尔全文搜索示例,但它们并没有给我足够的信息,让我能够自信地使用运算符(特别是+、-和*)和短语(而不是单个单词)。关于使用布尔模式的StackOverflow有很多问题,但它们都非常具体 MySQL Boolean全文搜索文档中没有说明操作符是否可以与短语结合使用(如果可以,如何使用)。例如,当我使用以下查询时,MySQL不会抱怨: SELECT * AS relevance FROM deliverables WHERE MATCH(title,descriptio

我一直在浏览MySQL中的布尔全文搜索示例,但它们并没有给我足够的信息,让我能够自信地使用运算符(特别是
+
-
*
)和短语(而不是单个单词)。关于使用布尔模式的StackOverflow有很多问题,但它们都非常具体

MySQL Boolean全文搜索文档中没有说明操作符是否可以与短语结合使用(如果可以,如何使用)。例如,当我使用以下查询时,MySQL不会抱怨:

SELECT * AS relevance FROM deliverables WHERE MATCH(title,description) AGAINST('+"customer engagement" vendor' IN BOOLEAN MODE)
这表明语法是有效的,但它返回的匹配项在标题或描述中的任何地方都不包含单词“customer”!因此,加号显然没有预期的效果

所以我的问题可以重新表述:在短语中使用运算符的规则是什么?

子问题包括以下内容:

  • +“某个短语”
    有效吗?(我的测试表明是这样,但可能忽略了
    +
    。)
  • -“某个短语”
    有效吗?(我的测试表明是这样的,而且它似乎像预期的那样工作。)
  • “som*短语”
    有效吗?(我的测试表明是这样,但它与任何东西都不匹配。)
  • “某些短语*”
    有效吗?(我的测试表明是这样,但它与任何东西都不匹配。)

如果要匹配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);

如果你想得到任何具体的结果,请与我分享,如果让我知道你想要的结果,那么我可以以更好的方式帮助你。

我最近也在测试这个问题,遇到了你的问题。使用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)
SELECT a.*
FROM company a
WHERE a.active = 1 AND MATCH(a.company) AGAINST('"socia* media"' IN BOOLEAN MODE)
SELECT a.*
FROM company a
WHERE a.active = 1 AND MATCH(a.company) AGAINST('"social medi*"' IN BOOLEAN MODE)
“som*短语”有效吗? *有效,但即使匹配结果可用,搜索也会返回0个结果

SELECT a.*
FROM company a
WHERE a.active = 1 AND MATCH(a.company) AGAINST('-"social media"' IN BOOLEAN MODE)
SELECT a.*
FROM company a
WHERE a.active = 1 AND MATCH(a.company) AGAINST('"socia* media"' IN BOOLEAN MODE)
SELECT a.*
FROM company a
WHERE a.active = 1 AND MATCH(a.company) AGAINST('"social medi*"' IN BOOLEAN MODE)
“某些短语*”有效吗? *有效,但即使匹配结果可用,搜索也会返回0个结果

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

恐怕这并没有什么帮助:查询所需要的只是全部三个单词,而我想(例如)需要一个特定的短语。问题是关于在短语中使用运算符,而不是在单词中使用运算符。谢谢您的额外评论。但它仍然不能回答我的问题,因为我希望能够要求一个特定的短语,同时可以选择包含其他单词或短语。看看我原来问题中的例子,我想要求使用“客户参与”一词,并可以选择使用“供应商”一词。我认为这应该写在
+“客户参与”供应商
;但是,正如我所说的,这并不像预期的那样有效。这意味着您希望所有行都包含“客户参与”或“供应商”。是否正确。
+“客户参与”供应商
意味着“客户参与”必须存在,“供应商”最好存在<代码>“客户参与”供应商
表示“客户参与”或“供应商”可以在那里。示例
-“某些短语”将始终不返回结果,因为您必须有匹配项才能从中排除结果。(我在上面链接的MySQL文档中说:“-运算符仅用于排除与其他搜索项匹配的行。因此,只包含前面带有-的项的布尔模式搜索返回空结果。它不会返回“除包含任何排除项的行外的所有行”。”)