首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Apache Solr中,词干搜索和模糊搜索一起工作吗?

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

Stack Overflow用户
提问于 2019-03-13 11:00:56
回答 2查看 468关注 0票数 5

我使用波特过滤工厂的一个字段,其中有3到4个字。

"ABC花卉公司“

我也希望在寻找ABC花卉公司的时候能把上面的文件拿来。

当我询问这个问题时:

代码语言:javascript
复制
name:ABC AND name:BLOSSOMING AND name:COMPANY

我得到我的结果

这就是解析后的查询的样子。

+名称:southern+名称:+名称:compani (Stemmer工作良好)

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

代码语言:javascript
复制
name:ABC~1 AND name:BLOSSOMING~1 AND name:COMPANY~1

搜索不提供任何文档作为结果,所解析的查询如下所示

+名称:abc~1 +name:blossoming~1 +name:company~2

这清楚地表明,堵塞并没有发生。请回顾并给出反馈。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-14 07:34:19

TL;博士

因为您已经使用了PorterFilter,而不是MultiTermAwareComponent,所以不会发生阻塞。

怎么办?

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

解释

你和其他许多人一样,被Solr's和Lucense的多项行为抓住了。Solr上有关于这个话题的一篇好文章。尽管这篇文章是过时的,但它仍然成立。

对于大多数Solr用户来说,最令人惊讶的是通配符查询还没有经过任何分析。实际上,这意味着通配符(以及前缀和范围)查询区分大小写,这与预期不符。在这个SOLR-2438,SOLR-2918,或者SOLR-2921中,这个行为被改变了。 你问的多学期是什么?从本质上说,这是任何可能“指向”多个真实术语的术语。例如,run*可以扩展为run、runner、runt、runt等等。同样,范围查询实际上也是一个“多术语”查询。在Solr 3.6之前,这些都是完全未处理的,应用层通常必须应用所需的任何转换,例如降低输入。通过“正常”查询分析链运行这些类型的术语会导致各种有趣的行为,因此避免了这种情况。

票数 4
EN

Stack Overflow用户

发布于 2021-12-18 11:14:05

好吧,下面的配置为我做了一些尝试,同时也进行了实验:

代码语言:javascript
复制
<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,产生了以下术语“忽略”的结果:

代码语言:javascript
复制
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...

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

然而,如果我在启用模糊搜索的情况下搜索“救援”,它不会产生任何结果。如果fuzzy被禁用,结果是:

代码语言:javascript
复制
1. The Searchers - ... a years-long journey to rescue his niece from ...
2. Star Wars - ...while also attempting to rescue Princess Leia from...

因此,模糊+堵塞的结果是不一致的。Elasticsearch与SOLR一样,基于Lucene,不建议使用模糊词干:

这也意味着,如果使用say,一个雪球分析器,一个模糊的搜索'run',将停止为'run‘,但不会匹配拼写错误的单词'runninga',它的词干'runninga',因为’run‘是超过两个编辑从'runninga’。这可能会造成相当多的混乱,因此,通常只对文本使用简单的分析器,以便与模糊查询一起使用,可能也会禁用同义词。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55140308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档