在Apache Solr中词干和模糊搜索一起工作吗

axkjgtzd  于 2022-11-05  发布在  Solr
关注(0)|答案(2)|浏览(173)

我正在使用波特过滤器工厂的一个领域,其中有3至4个字在它。
例如:“ABC开花公司”
我希望获取上述文件时,我搜索ABC花卉公司以及。
当我查询这个:

name:ABC AND name:BLOSSOMING AND name:COMPANY

我得到我的结果
这是解析后的查询的外观
+名称:南方+名称:开花+名称:compani(发胶做工精细)
但是当我添加模糊语法和这样的查询时,

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

搜索没有给予任何文档作为结果,解析后的查询如下所示
+名称:abc~1 +名称:朵朵~1 +名称:公司~2
这清楚地表明词干没有发生。请检查并给予反馈。

7rtdyuoh

7rtdyuoh1#

TL;DR

由于您使用的是PorterFilter(不是MultiTermAwareComponent),因此未进行词干提取。

要做什么?

使用实现MultiTermAwareComponent接口的过滤器/规范化器之一。

说明

你和其他人一样,也被Solr和Lucense的Multiterm行为所吸引。在Solr的wiki上有a good article about this topic。尽管这篇文章已经过时,但它仍然是正确的
对于大多数Solr用户来说,其中一个令人惊讶的地方是通配符查询没有经过任何分析。实际上,这意味着通配符(以及前缀和范围)查询是区分大小写的,这与预期不符。在SOLR-2438、SOLR-2918,或许还有SOLR-2921中,这种行为被改变了。
你问什么是多项查询?本质上它是任何可能“指向”多个真实的项的项。例如,run* 可以扩展为runs、runner、running、runt等。同样,范围查询也是一个真正的“多项”查询。在Solr 3.6之前,这些查询是完全未处理的,应用程序层通常必须应用所需的任何转换。例如输入的小写,通过“正常”的查询分析链运行这些类型的术语会导致各种有趣的行为,因此要避免。

xuo3flqw

xuo3flqw2#

在我进行试验时,以下配置在一定程度上帮助了我:

<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>

(yes,我修改了现有的“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...

因为第一个结果是合适的。
然而,如果我在启用模糊搜索的情况下搜索“rescovering”,它将一无所获。如果禁用模糊搜索,结果将是:

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

因此,模糊+词干的结果是相当不一致的。Elasticsearch,它是基于Lucene的,就像SOLR一样,不推荐使用模糊+词干:
这也意味着,如果使用雪球分析器,模糊搜索'running',将得到'run'的词干,但不会匹配拼写错误的单词'runninga',它的词干为'runninga',因为'run'与'runninga'之间的距离超过2个编辑。这可能会造成相当多的混乱,因此,通常只对用于模糊查询的文本使用简单的分析器是有意义的,也可能禁用同义词。
来源:https://www.elastic.co/blog/found-fuzzy-search

相关问题