我使用Solr提供的text_general
字段来存储网页内容,如下所示:
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
字段:
<field name="content" type="text_general" stored="true" indexed="true"/>
说,在synonyms.txt
我有一个条目:
ABC=>Apple Ball Company
如果我使用content
在q=content:ABC
字段上执行搜索,则在我的数据中,我没有任何内容与“Apple Ball Company
”在一起。
我得到Apple
中Ball
,Company
和content
的所有字词的突出显示片段,其中包含的字词不在同一序列中,甚至不在一起。
我希望仅针对首字母缩写词ABC
突出显示和/或仅针对展开“Apple Ball Company
”突出显示(如果这些词汇以相同的顺序组合在一起)。
答案 0 :(得分:1)
SynonymFilterFactory
存在多字同义词导致“香肠化”的问题。这里解释得非常好:https://lucidworks.com/2014/07/12/solution-for-multi-term-synonyms-in-lucenesolr-using-the-auto-phrasing-tokenfilter/原因是过滤器只考虑了令牌的偏移量而不考虑位置长度增量。已经使用SynonymGraphFilter解决了这个问题,请参阅https://lucene.apache.org/solr/guide/6_6/filter-descriptions.html#FilterDescriptions-SynonymGraphFilter
因此,请使用SynonymGraphFilter
代替弃用的SynonymFilterFactory
,例如<filter class="solr.SynonymGraphFilterFactory" synonyms="mysynonyms.txt"/>
。