Search 不应该';solr查询的模糊版本总是返回其非模糊等价项的超集

Search 不应该';solr查询的模糊版本总是返回其非模糊等价项的超集,search,solr,fuzzy-search,Search,Solr,Fuzzy Search,我使用下面的查询在Solr4.5.1上进行模糊搜索,结果为空 qt=standard&q=+(field1|en_CA|:Swimming~2 field1|en|:Swimming~2) +(field1|en_CA|:Goggle~1 field1|en|:Goggle~1) +(+startDate:[* TO 2013-12-04T00:23:00Z] -endDate:[* TO 2013-12-04T00:23:00Z])&start=0&rows=10&am

我使用下面的查询在Solr4.5.1上进行模糊搜索,结果为空

qt=standard&q=+(field1|en_CA|:Swimming~2 field1|en|:Swimming~2) +(field1|en_CA|:Goggle~1 field1|en|:Goggle~1) +(+startDate:[* TO 2013-12-04T00:23:00Z] -endDate:[* TO 2013-12-04T00:23:00Z])&start=0&rows=10&fl=id
如果我通过简单地从术语中删除tildes(见下文)将其更改为非模糊查询,那么它将返回预期结果!这是虫子吗?查询的模糊版本不应该总是返回其非模糊等价物的超集吗

qt=standard&q=+(field1|en_CA|:Swimming field1|en|:Swimming) +(field1|en_CA|:Goggle field1|en|:Goggle) +(+startDate:[* TO 2013-12-04T00:23:00Z] -endDate:[* TO 2013-12-04T00:23:00Z])&start=0&rows=10&fl=id

是的,它应该匹配,除非您所拥有的只是数据的模糊版本。
换句话说,在索引的数据中是否有“游泳”一词

以下是我从lucene solr用户邮件列表中得到的信息:

很可能你没有像以前那样分析这些模糊术语 喜欢请参阅调试(&debug=true)输出以确定。很可能是 模糊术语没有小写。看见 欲知详情 (这也适用于模糊术语,而不仅仅是通配符)

经过进一步的分析,结果表明,在我的例子中,是词干分析器过滤器导致了问题。将以下内容添加到归档类型修复了问题:-)


根据Solr的构建基础,模糊搜索语法表示为0到1之间的值。所以你的问题是:

q=+(field1 | en | U CA |:游泳0.2field1 | en |:游泳0.2)

而不是

q=+(场1 | en|u CA |:游泳2场1 | en |:游泳2)

希望这有帮助

<analyzer type="multiterm" >
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.SnowballPorterFilterFactory" language="English"/>
</analyzer>