关键字 solr 的相关性



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

我只在标签字段上开始搜索

当我有

  1. Solr 搜索查询 titi
  2. 测试倾斜

我们应该设置什么参数来恢复此订单?

  1. 测试倾斜
  2. Solr 搜索查询 titi

我使用Drupal进行连接并将查询发送到solr。

如果您的域非常包含,并且您知道例如您期望的标签的大小,则可以使用复制字段和 dismax 查询解析器获得接近您想要的内容。具体来说,你可以这样构建N个"复制字段":

<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"/>

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

qf="label_3^5 label_5^2 label">

这里也讨论了这个问题[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] 索尔 - 如何提高早期比赛的得分?

相关内容

  • 没有找到相关文章

最新更新