在Apache Solr中,茎和模糊的搜索是否可以一起使用



我正在使用波特过滤器工厂用于其中有3到4个单词的字段。

eg:" ABC Blossom Company"

当我搜索ABC开花公司时,我希望可以获取上述文档。

当我查询此问题时:

name:ABC AND name:BLOSSOMING AND name:COMPANY

我得到我的结果

这就是解析的查询看起来像

名称:南部 名称: blossom 名称:compani (Stemmer工作正常)

但是,当我添加模糊语法和这样的查询时,

name:ABC~1 AND name:BLOSSOMING~1 AND name:COMPANY~1

搜索没有结果给出任何文档,而解析的查询看起来像这样

名称:ABC 〜1 名称:开花 〜1 名称: Company 〜2

这清楚地表明,茎没有发生。请审查并提供反馈。

tl; dr
由于您使用的不是多级捕集者。

该怎么办?
使用实现MultiterMawareCompents接口的滤波器/惯例之一。

说明
与许多其他人一样,您也被Solr和Lucense Multiterm行为所抓住。关于Solr Wiki,有一篇关于此主题的好文章。尽管这篇文章已经过时了,但它仍然保持真实

对于大多数SOLR用户来说,惊喜之一是通配符查询尚未进行任何分析。实际上,这意味着通配符(以及前缀和范围)查询对案例敏感,这与期望不符。截至此Solr-2438,Solr-2918,也许是Solr-2921,此行为已更改。

您问的多标准是什么?从本质上讲,这是"指出"的任何术语。一个以上的真实术语。例如,Run*可以扩展到Runs,Runner,Runner,Runt等。同样,范围查询实际上是" Multiterm"。也查询。在Solr 3.6之前,这些内容完全未经处理,应用层通常必须应用所需的任何转换,例如降低输入。通过"正常"运行这些类型的术语查询分析链会导致各种有趣的行为,因此避免了。

嗯,这是对我有所帮助的配置,在实验时:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.FlattenGraphFilterFactory"/>        
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.LowerCaseFilterFactory"/>
     <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
     <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>

(是的,我修改了现有的" text_general"字段,我说我正在实验)

将其与模糊编辑距离2一起使用,它为"忽视"产生以下结果:

1. Lost in Translation - A faded movie star and a neglected young woman...
2. Election - A high school teacher meets his match in an over-achieving...
3. Annie Hall - Alvy Singer, a divorced Jewish comedian, reflects on his relationship...

这有点好,因为第一个结果是适当的。

但是,如果我搜索"营救"通过启用模糊搜索,它不会产生任何产生。如果禁用模糊,结果为:

1. The Searchers - ... a years-long journey to rescue his niece from ...
2. Star Wars - ...while also attempting to rescue Princess Leia from...

因此,模糊 茎的结果相当不一致。像Solr这样的Lucene的Elasticsearch不建议使用fuzzy和stemming:

这也意味着,如果使用说,雪球分析仪,对"跑步"的模糊搜索,将被驱使到"运行",但将不匹配拼写错误的单词'runninga',它会使" runninga'",因为"运行"距离" Runninga"超过2个编辑。这可能会引起很多混乱,因此,仅在旨在与模糊查询一起使用的文本上使用简单的分析仪通常是有意义的。

也可能禁用同义词。

来源:https://www.elastic.co/blog/found-fuzzy-search

最新更新