我将部分字段从text_general
更改为text_en
,希望利用词干和其他一些改进,但不幸的是,这一变化突显了突出显示。它似乎只是想突出非词干的词(即词干版本与词本身相同的词,如“孩子”)。
我正在使用默认的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词干分析器阻止的,而不是由此阻止的。这样一个词的一个例子是“跨步”。
有谁知道发生了什么事?
答案 0 :(得分:2)
我知道这个问题已经死了,但对于读这篇文章的人来说,这是我的解决方案。
首先,请注意,只有在使用&#34; hlq&#34;时才会出现此行为。如果你正在使用&#34; q&#34;作为突出显示查询以及搜索查询,事情应该没问题。但如果这不是您的应用程序所需要的,那么您可以这样做:
在您的分析器链中,对于索引和查询,请添加:
<!-- 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返回的具有空白突出显示字段的一些文档)