Solr在字符串的位置设置更多相关性

时间:2014-01-24 20:05:19

标签: solr relevance

如何根据String的位置使Solr在单词中设置更多相关性。

例如,如果我搜索“Macbook”,第一个结果就像“Case Logic LAPS-113 13.3英寸笔记本电脑/ MacBook Air”和“Apple MacBook Pro MD101LL / A 13.3英寸”之后。

这是我的现场声明:

<fieldType name="text_pt" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>

        <filter class="solr.SynonymFilterFactory" synonyms="lang/index_synonyms.txt" ignoreCase="true" expand="false"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_pt.txt" />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.KeywordMarkerFilterFactory" protected="lang/protwords_pt.txt"/>
        <filter class="solr.SynonymFilterFactory" synonyms="lang/synonyms.txt" ignoreCase="true" expand="false"/>
    </analyzer>

    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>

        <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_pt.txt" />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.KeywordMarkerFilterFactory" protected="lang/protwords_pt.txt"/>
        <filter class="solr.SynonymFilterFactory" synonyms="lang/synonyms.txt" ignoreCase="true" expand="false"/>
    </analyzer>

</fieldType>

1 个答案:

答案 0 :(得分:2)

如果产品名称是“MacBook /戴尔/联想笔记本便宜外壳”,它在第一个位置包含Macbook,你还想提升这个文件吗?

我认为您应该尝试解决问题的根本原因,如何处理配件(例如“案例”,“电池”,“锁定”等)的常见问题得分比产品本身更好。

显而易见的最佳选择:索引一个字段,指出文档是否是附件(我认为你没有这些信息,否则这是最好的方法),并提升那些不是附件的。

如果您没有该信息,可以尝试惩罚包含“典型”辅助词的文档。为此你需要建立这样一个列表,但这并不难。我用这种方法效果很好。