2016-09-13 49 views
1

我们正在寻找MySQL查询其提供准确结果查询like '%%'但使用全文搜索MATCH AGAINST相似到MySQL像“%%”查询

例如全文搜索结果

Select id,name from table where jobtitle like '%java software engineer in google%' 

它给所有在google中包含行java软件工程师的行

但是如果我们用下面的mysql查询,那么它会给出不同的结果

Select id,name from table 
where MATCH(jobtitle) AGAINST ('+java software engineer in google' IN BOOLEAN MODE) 

它给出包含任何单词在谷歌

Java软件工程师,我想这来自于使用像查询“在谷歌%% Java软件工程师”的确切输出行。

回答

0

Boolean fulltext search MySQL文档显示(粗体是我的):

的布尔全文搜索功能支持以下 运营商:[...]

一包含在双引号(“”“)字符中的短语仅匹配 只包含字面意义的短语,因为它是键入的。全文引擎将该短语拆分为单词并在 中搜索单词的FULLTEXT索引。 非字词字符不必是 完全匹配:短语搜索只需要匹配包含 与短语完全相同的单词并按相同的顺序。对于 示例,“测试短语”匹配“测试,短语”。

如果短语不包含索引中的词,则结果为 为空。由于 因素的组合,这些词可能不在索引中: 因素:如果它们不存在于文本中,是停用词,或者是短于索引词的最小长度的 。

因此,使用"操作:

Select id,name from table 
where MATCH(jobtitle) AGAINST ('"java software engineer in google"' IN BOOLEAN MODE) 

加粗部分包含警告:结果可能是因为全文索引的性质略有不同。

+0

您的查询显示无结果。没有找到行,甚至有行,其中包含确切的线路java软件工程师在谷歌。在数据库中的行是谷歌德里的java软件工程师的工作 –

+0

单词“in”可能短于最小单词长度,因此全文索引找不到它,因此它不返回任何记录。查看更新的答案。增加的部分是链接MySQL手册中的下一段... – Shadow

+0

ido不明白。我想匹配查询来搜索这一行java软件工程师在谷歌任何地方进来行 –