如何在 Apache Solr 中使用缩写词?

How to use acronyms in Apache Solr?

我使用 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”一起。

我在我的 content 中得到了所有单词 AppleBallCompany 的突出显示片段,其中包含那些顺序不相同甚至不在一起出现的单词。

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

多词同义词 SynonymFilterFactory 存在问题,导致 "sausagination"。这里解释得很好:https://lucidworks.com/2014/07/12/solution-for-multi-term-synonyms-in-lucenesolr-using-the-auto-phrasing-tokenfilter/ The reason is that the filter only takes into account the offset of the tokens but not the position length increment. This has been address with the SynonymGraphFilter, see https://lucene.apache.org/solr/guide/6_6/filter-descriptions.html#FilterDescriptions-SynonymGraphFilter

因此请使用 SynonymGraphFilter 而不是已弃用的 SynonymFilterFactory,例如<filter class="solr.SynonymGraphFilterFactory" synonyms="mysynonyms.txt"/>.