关键词solr的相关性

时间:2017-11-14 13:48:54

标签: sorting solr drupal-7 relevance solr5

我们如何根据关键字的位置对查询结果进行排序?

我只在标签栏

上开始搜索

当我有

  1. solr搜索查询 titi
  2. titi 测试tilte
  3. toto titi tata
  4. 我们应该使用什么参数来恢复此订单?

    1. titi 测试tilte
    2. toto titi tata
    3. solr搜索查询 titi
    4. 我使用Drupal进行连接并向solr发送查询。

1 个答案:

答案 0 :(得分:0)

如果您的域名非常包含,并且您知道标签的大小,那么您可以通过复制字段和dismax查询解析器获得接近您想要的内容。 具体来说,你可以建立N" copyfields"这样:



<field name="label" type="text_general" indexed="true" stored="true"/>
<field name="label_3" type="text_first_3" indexed="true" stored="true"/>
<field name="label_5" type="text_first_5" indexed="true" stored="true"/>
...
<fieldType name="text_first_3" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.LimitTokenPositionFilterFactory"             maxTokenPosition="3" consumeAllTokens="false" />
</analyzer>
        <analyzer type="query">
            <tokenizer class="solr.StandardTokenizerFactory"/>
        </analyzer>
    </fieldType>

<fieldType name="text_first_5" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
            <filter class="solr.LimitTokenPositionFilterFactory"             maxTokenPosition="5" consumeAllTokens="false" />
</analyzer>
        <analyzer type="query">
            <tokenizer class="solr.StandardTokenizerFactory"/>
        </analyzer>
    </fieldType>
...
<copyField source="label" dest="label_3"/>
<copyField source="label" dest="label_5"/>
&#13;
&#13;
&#13;

这要归功于限制标记位置过滤器[1]。 然后,您可以使用edismax指定不同的提升:

qf =&#34; label_3 ^ 5 label_5 ^ 2 label&#34;

这里也讨论了这个问题[2]。

这里提到了另一种方法[3]。

[1] https://lucene.apache.org/solr/guide/6_6/filter-descriptions.html#FilterDescriptions-LimitTokenPositionFilter

[2] https://issues.apache.org/jira/browse/SOLR-3925

[3] Solr - How to boost score for early matches?