如何在Apache Solr中使用首字母缩略词?

时间:2017-12-13 11:52:42

标签: solr solrcloud solr-query-syntax acronym solr-schema

我使用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

如果我使用contentq=content:ABC字段上执行搜索,则在我的数据中,我没有任何内容与“Apple Ball Company”在一起。

我得到AppleBallCompanycontent的所有字词的突出显示片段,其中包含的字词不在同一序列中,甚至不在一起。

我希望仅针对首字母缩写词ABC突出显示和/或仅针对展开“Apple Ball Company”突出显示(如果这些词汇以相同的顺序组合在一起)。

1 个答案:

答案 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"/>