Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Solr-如何将包含所有术语查询的结果排在第一位?_Solr_Lucene - Fatal编程技术网

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

Solr-如何将包含所有术语查询的结果排在第一位?,solr,lucene,Solr,Lucene,我使用Solr4.9,我需要更改它的排名系统,它首先显示包含所有术语查询的结果,然后显示另一个基于tf/idf的结果 顺便说一句,我的solr的defaultSearchOperator是OR。您可以组合两个查询,第一个使用AND,第二个使用OR运算符,然后将它们与OR组合。这将有效地返回包含顶部所有搜索词的任何结果 (+term1 +term2 +term3) OR (term1 term2 term3) 使用ommittermfrequeandpositions=“true”定义字段-这将

我使用Solr4.9,我需要更改它的排名系统,它首先显示包含所有术语查询的结果,然后显示另一个基于tf/idf的结果


顺便说一句,我的solr的defaultSearchOperator是OR。

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

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

使用
ommittermfrequeandpositions=“true”
定义字段-这将从评分中排除有关术语频率及其位置的信息(因为它不可用)

如果您想在不同的设置中使用评分的频率和位置,请使用
copyField
为需要从评分中排除TermFreq的查询提供一个替代字段。

使用公式中的参数幂,我们可以为包含更多术语查询的文档获得更高的评分

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);
    }
}

这是默认情况下的行为。你的查询看起来像什么,你看到了什么分数(在debugQuery中)以及你期望得到什么?感谢@MatsLindh,我查询的第一个和第二个结果,只包含两个高频查询项(我的查询包含3个高频查询项,如John Smith Pocahontas),但第三个结果包含所有低频查询项。我想在第一位显示第三个结果。谢谢@spyk,你的解决方案是正确的,但我想更改结果的排名,而不是查询!