【问题标题】:Is there way to boost original term more while using Solr synonyms?有没有办法在使用 Solr 同义词时更多地提升原始术语?
【发布时间】:2012-05-26 12:00:31
【问题描述】:

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

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

【问题讨论】:

    标签: solr tokenize synonym solr-schema


    【解决方案1】:

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

    假设您的字段名为title。创建另一个作为此副本的字段,例如title_synonyms。现在确保 SynonymFilterFactory 仅用作 title_synonyms 的分析器(您可以通过对两个字段使用不同的字段类型来做到这一点 - 例如 text 和 text_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>
    

    【讨论】:

    • 真是个好主意!但在我的情况下,我有大约 10 个需要同义词的字段,所以......如果没有其他解决方法会这样做......solr 补丁等
    • 如果您对所有这些字段使用同一个同义词文件,您可以将它们全部复制到一个通用同义词字段中——您不需要每个字段对应一个同义词字段。
    • 但我对所有字段都使用细粒度权重。所以标题的同义词比描述等的同义词更重要。
    • 多词搜索对查询时间同义词有问题。请参阅:SynonymFilterFactory documentation
    猜你喜欢
    • 1970-01-01
    • 2022-11-10
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    相关资源
    最近更新 更多