Solr - 我如何将包含所有术语查询的结果排在第一位?

时间:2014-09-08 08:06:04

标签: solr lucene

我使用solr 4.9并且我需要更改其排名系统,该系统首先显示包含所有术语查询的结果,然后根据tf / idf显示另一个结果。

BTW,我的solr的defaultSearchOperator是OR。

3 个答案:

答案 0 :(得分:2)

使用omitTermFreqAndPositions="true"定义字段 - 这将排除有关条款频率及其评分位置的信息(因为它不可用)。

如果您想在不同的设置中使用频率和位置进行评分,请使用copyField有一个替代字段,用于要求从分数中排除termfreqs的查询。

答案 1 :(得分:1)

您可以组合两个查询,第一个使用AND,第二个使用OR运算符,然后将它们与OR组合。这将有效地返回包含所有搜索词的任何结果。

(+term1 +term2 +term3) OR (term1 term2 term3)

答案 2 :(得分:0)

使用coord公式中TF-IDF similarity参数的强大功能,我们可以获得包含更多字词查询的文档的更高分数。

import org.apache.lucene.search.similarities.DefaultSimilarity;

public class EnhancedTFIDFSimilarity extends DefaultSimilarity {

    @Override
    public float coord(int overlap, int maxOverlap) {
        float _coord = (overlap / (float)maxOverlap);    
        return (_coord * _coord);
    }
}