11

例如,我在 index_synonyms.txt 中有同义词笔记本电脑、上网本、笔记本

当用户搜索上网本时,我想增加原始文本,然后通过同义词扩展?有没有办法在 SynonymFilterFactory 中指定这个?例如使用原始术语两次,所以他的 TF 会更大

4

1 回答 1

8

据我所知,现有的 SynonymFilterFactory 无法做到这一点。但是以下是您可以用来获得此行为的技巧。

假设您的字段名为title. 创建另一个字段,该字段是此字段的副本,例如title_synonyms. 现在确保 SynonymFilterFactory 仅用作分析器title_synonyms(您可以通过对两个字段使用不同的字段类型来做到这一点 - 比如说texttext_synonyms)。在这两个字段中进行搜索,但对title比给予更高的提升title_synonyms

以下是示例字段类型定义:

    <fieldType name="text" class="solr.TextField">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        </analyzer>
    </fieldType>

    <fieldType name="text_synonyms" class="solr.TextField">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms_index.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms_query.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        </analyzer>
    </fieldType>

以下是示例字段定义:

    <field name="title" type="text" stored="false"
           required="true" multiValued="true"/>
    <field name="title_synonyms" type="text_synonyms" stored="false"
           required="true" multiValued="true"/>

title字段复制到title_synonyms

<copyField source="title" dest="title_synonyms"/>

如果您正在使用dismax,则可以对这些字段进行不同的提升,如下所示:

    <str name="qf">title^10 title_synonyms^1</str>
于 2012-05-19T05:25:03.380 回答