2

我将我的一些字段从 更改text_generaltext_en,希望利用词干提取和其他一些改进,但不幸的是,更改破坏了突出显示。似乎它只想突出显示非词干词(即词干版本与词本身相同的词,如“child”)。

我正在使用默认的 fieldType 定义:

 <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
   <analyzer type="index">
     <tokenizer class="solr.StandardTokenizerFactory"/>
     <filter class="solr.StopFilterFactory"
             ignoreCase="true"
             words="lang/stopwords_en.txt"
             />
     <filter class="solr.LowerCaseFilterFactory"/>
     <filter class="solr.EnglishPossessiveFilterFactory"/>
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
     <filter class="solr.PorterStemFilterFactory"/>
   </analyzer>
   <analyzer type="query">
     <tokenizer class="solr.StandardTokenizerFactory"/>
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
     <filter class="solr.StopFilterFactory"
             ignoreCase="true"
             words="lang/stopwords_en.txt"
             />
     <filter class="solr.LowerCaseFilterFactory"/>
     <filter class="solr.EnglishPossessiveFilterFactory"/>
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
     <filter class="solr.PorterStemFilterFactory"/>
   </analyzer>
 </fieldType>

hl.fl=title&hl=true在我的查询中启用突出显示。如果这很重要,这也是一个多面搜索。

在这种情况下,正如我所说,只有像“孩子”这样的无词干词会被突出显示。如果我从定义中的索引分析器中删除词干过滤器(仅,查询分析器似乎没有效果),text_en则会突出显示除停用词之外的所有匹配词。此外,如果我text_en改为使用EnglishMinimalStemFilterFactory,则会突出显示更多的单词,我认为这是因为它们是由 Porter 词干分析器而不是由这个词干分析的。这种词的一个例子是“strides”。

有谁知道发生了什么?

4

1 回答 1

2

我知道这个问题已经死了,但对于任何阅读这里的人来说,这是我的解决方案。

首先,请注意,这种行为仅在您使用“hlq”时才会发生。如果您使用“q”作为突出显示查询以及搜索查询,事情应该没问题。但是,如果这不是您的应用程序所需要的,您可以这样做:

在您的分析器链中,对于索引和查询,添加以下内容:

<!-- will keep both the stemmed and unstemmed versions from any stemmer -->

<filter class="solr.KeywordRepeatFilterFactory" />

<!-- put your stemmer here, something like: -->

<filter class="solr.SnowballPorterFilterFactory"/>

<!-- if unstemmed == stemmed, only keep one -->

<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>

基本上,这将保留所有带有词干和非词干版本的单词,然后删除重复项。现在突出显示将匹配文档(尽管它仍然只匹配输入为 hlq 的 EXACT 短语,而 q 将匹配具有相同词干的任何内容,因此可能仍然有一些由 q 返回的文档具有空白突出显示字段)

于 2017-05-02T19:10:57.663 回答