有没有办法在使用Solr同义词时更多地提升原始术语?

yur*_*ura 11 solr tokenize synonym solr-schema

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

当用户搜索上网本时,我想提升原始文本,然后通过同义词进行扩展?有没有办法在SynonymFilterFactory中指定它?例如,使用原始术语两次,因此他的TF将更大

Sid*_*ddy 8

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

假设您的字段被调用title.比如创建另一个字段,这是一个副本title_synonyms.现在确保SynonymFilterFactory仅用作分析器title_synonyms(您可以通过为两个字段使用不同的字段类型来实现此目的 - 比如说texttext_synonyms).搜索在这两个领域,但给高提振titletitle_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>
Run Code Online (Sandbox Code Playgroud)

以下是示例字段定义:

    <field name="title" type="text" stored="false"
           required="true" multiValued="true"/>
    <field name="title_synonyms" type="text_synonyms" stored="false"
           required="true" multiValued="true"/>
Run Code Online (Sandbox Code Playgroud)

title字段复制到title_synonyms:

<copyField source="title" dest="title_synonyms"/>
Run Code Online (Sandbox Code Playgroud)

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

    <str name="qf">title^10 title_synonyms^1</str>
Run Code Online (Sandbox Code Playgroud)

  • 如果您对所有这些字段使用相同的同义词文件,则可以将它们全部复制到一个公共同义词字段中 - 您不需要与每个字段对应的一个同义词字段. (2认同)