0

我想在 solr 中对多关键字使用同义词搜索。但它不正确。

我在 synonym.txt 中为“multerm”设置了同义词“multi term”。而且我希望 Solr 为“multerm”生成查询短语,就像“field:”multi term”~0 但是“field:multi | field:term"。所以它不能对多词同义词进行亲密搜索。

任何人都有在 Solr 中进行多词同义词搜索的最佳方法?请帮帮我~

4

1 回答 1

1

这是我处理多词同义词的方法。在我的 schema.xml 中,fieldType 定义如下所示:

<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" tokenizer="solr.KeywordTokenizerFactory"/>

<fieldType name="custom_text_general" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <!-- We will use synonyms only at index time to keep querying fast-->
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" tokenizer="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="English" />
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <!-- We will use synonyms only at index time to keep querying fast
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        -->
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SnowballPorterFilterFactory" language="English" />
    </analyzer>
</fieldType>

需要注意的几点:

  • 我只在索引时使用同义词,以保持快速查询。
  • 我添加了KeywordTokenizerFactory,它将整个字段视为单个标记,并且不拆分多词同义词
  • 我添加了 expand="true"。如果 expand 为真,同义词将扩展为所有等效的同义词。如果它是假的,所有等效的同义词将减少到列表中的第一个。
  • 查询时间同义词被注释掉。
于 2013-06-21T17:00:19.547 回答