我使用solr 4.9并且我需要更改其排名系统,该系统首先显示包含所有术语查询的结果,然后根据tf / idf显示另一个结果。
BTW,我的solr的defaultSearchOperator是OR。
答案 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);
}
}