我使用波特过滤工厂的一个字段,其中有3到4个字。
"ABC花卉公司“
我也希望在寻找ABC花卉公司的时候能把上面的文件拿来。
当我询问这个问题时:
name:ABC AND name:BLOSSOMING AND name:COMPANY我得到我的结果
这就是解析后的查询的样子。
+名称:southern+名称:+名称:compani (Stemmer工作良好)
但是当我添加这样的模糊语法和查询时,
name:ABC~1 AND name:BLOSSOMING~1 AND name:COMPANY~1
搜索不提供任何文档作为结果,所解析的查询如下所示
+名称:abc~1 +name:blossoming~1 +name:company~2
这清楚地表明,堵塞并没有发生。请回顾并给出反馈。
发布于 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之前,这些都是完全未处理的,应用层通常必须应用所需的任何转换,例如降低输入。通过“正常”查询分析链运行这些类型的术语会导致各种有趣的行为,因此避免了这种情况。
发布于 2021-12-18 11:14:05
好吧,下面的配置为我做了一些尝试,同时也进行了实验:
<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...这有点好,因为第一个结果是适当的。
然而,如果我在启用模糊搜索的情况下搜索“救援”,它不会产生任何结果。如果fuzzy被禁用,结果是:
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://stackoverflow.com/questions/55140308
复制相似问题