与类似sql的搜索相比,sphinx返回的匹配项更少
我使用Sphinx在我的网站上进行搜索,但当我使用与类似sql的搜索相比,sphinx返回的匹配项更少,sphinx,Sphinx,我使用Sphinx在我的网站上进行搜索,但当我使用 LIKE '%19.628%' 返回我要查找的数据(8个匹配项),但与类似sql的搜索相比,使用sphinx时返回的匹配项较少(3个匹配项) 下面是PHP代码 $sp->SetMatchMode(SPH_MATCH_ANY); $sp->SetArrayResult(true); $sp->SetLimits(0,1000000); $results = $sp->Query($query, 'data_base');
LIKE '%19.628%'
返回我要查找的数据(8个匹配项),但与类似sql的搜索相比,使用sphinx时返回的匹配项较少(3个匹配项)
下面是PHP代码
$sp->SetMatchMode(SPH_MATCH_ANY);
$sp->SetArrayResult(true);
$sp->SetLimits(0,1000000);
$results = $sp->Query($query, 'data_base');
为什么?
Sphinx不像MySQL那样使用通配符。这里有几个原因,你可能没有得到你想要的结果
- 在您的示例中,MySQL将计算该字段中的整个值。但是,斯芬克斯对字符串
的理解可能有所不同。如果使用默认值,则Sphinx会将该字符串拆分为两个单词,可能会导致不同的结果19.628
的值到底是多少?我怀疑它可能是类似于“*19.628*”的东西。如果尚未启用,则可能无法获得所需的结果$query
19.628
只会在文档中的任何位置查找整个单词19
和628
。当然,Asumming
不在您的charset\u表中
事实上,您甚至启用了任何模式。所以它只寻找其中一个词
因此,要获得相同的文档匹配,需要使用Extended
模式。将查询包围在“
中以获得短语匹配。并使用*
代替%
$cl->setMatchMode(SPH_MATCH_EXTENDED);
$cl->Query('"%19.628%"',$index);
对于索引设置,您不希望在词组边界中
(因为您希望使用词组搜索),您需要启用部分词匹配-使用mininfix\u len
,因为希望*
在词的开头和结尾(如果使用启用星号=1
)
您可以选择是否在charset\u表中使用
。对于这个查询来说,这应该无关紧要
(切向的,但您真正高的$limit实际上不适用,setLimits有第三个$max_matches参数,它设置了您可以使用的最高$offset+$limit-默认值为1000)谢谢您的帮助,我使用的是defautl短语边界,$query
,只包含19.628,star\U语法,未启用。我更改配置文件添加您的建议,问题仍然存在,下面是我配置文件的一部分:短语边界\U步骤=100
短语边界=,?,!,U+2026
启用_star=1,我认为这个问题源于sql\u查询,因为我使用这个SELECT*FROM juris
,可以是?default短语\u边界为空。此外,它只影响存储索引中的单词位置,以阻止显式短语搜索匹配acorss边界。它不影响查询,短语中的字符为界我在查询中没有任何特殊意义。