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

时间:2013-12-04 01:26:32

标签: search solr fuzzy-search

我正在使用以下查询在Solr 4.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

如果我通过简单地从术语中删除波浪号(见下文)将其更改为非模糊查询,则返回预期结果!这是一个错误吗?模糊版本的查询不应该总是返回其非模糊等价的超集吗?

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

以下是我在lucene-solr-user邮件列表上的内容:

  

你有可能没有按照你的方式分析那些模糊的术语   喜欢。请参阅debug(& debug = true)输出以确定。最有可能的   模糊术语不是小写的。看到   http://wiki.apache.org/solr/MultitermQueryAnalysis了解更多详情   (这也适用于模糊,而不仅仅是通配符)。

进一步分析后发现,在我的情况下,它是造成问题的词干过滤器。将以下内容添加到字段类型修复了问题: - )

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

答案 2 :(得分:0)

根据构建Solr的documentation for Lucene,模糊搜索语法表示为介于0和1之间的值。因此,您的查询将是:

q = +(field1 | en_CA |:游泳〜 0.2 field1 | en |:游泳〜 0.2 )....

而不是

q = +(field1 | en_CA |:游泳〜 2 field1 | en |:游泳〜 2 )....

希望这有帮助!