2

我使用text_generalSolr 提供的配置字段来存储网页内容,如下所示:

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

我得到了所有单词的突出显示片段AppleBall并且Company在我content包含的这些单词中,这些单词的顺序不同,甚至没有一起出现。

我只想突出显示首字母缩写词ABC和/或仅用于扩展“ Apple Ball Company”(如果这些词以相同的顺序组合在一起)。

4

1 回答 1

3

多词同义词存在SynonymFilterFactory导致“香肠”的问题。这里解释得很好:https ://lucidworks.com/2014/07/12/solution-for-multi-term-synonyms-in-lucenesolr-using-the-auto-phrasing-tokenfilter/原因是filter 只考虑标记的偏移量,而不考虑位置长度增量。这已通过 SynonymGraphFilter 解决,请参阅https://lucene.apache.org/solr/guide/6_6/filter-descriptions.html#FilterDescriptions-SynonymGraphFilter

因此,请使用 theSynonymGraphFilter来代替已弃用的SynonymFilterFactory,例如<filter class="solr.SynonymGraphFilterFactory" synonyms="mysynonyms.txt"/>.

于 2017-12-13T12:38:01.553 回答