我正在使用由termqueries构成的booleanquery,所有这些都在同一个字段上,所有这些都设置在' SHOULD'此刻。
我试图弄清楚ScoreDoc []结果对象的排名如何适用于此查询,但是找不到合适的文档,也许您可以帮助解决以下问题:
1)booleanquery等级是否会匹配所有高于仅匹配单个术语的命中的术语?
2)有没有办法确定哪个termquery匹配,哪个不是scoredoc对象?
感谢您的帮助!
答案 0 :(得分:1)
布尔查询确实对多个查询项的命中次数比仅匹配一次的查询项更高,但请记住,这只是评分算法的一部分。还有许多其他影响可以解决这个问题。
由布尔查询组合的查询字词将它们的子分数相乘以形成最终分数,因此更多的查询字词匹配自然会更加重要。最重要的是,有一个坐标因子,当较大比例的查询词匹配时,它会更大,这也会加到得分中。
但是,相同查询字词,文档长度,术语稀有度和提升次数的多个匹配项也会对分数产生影响,并且即使它们与所有字词不匹配,也很可能拥有文档,从这些影响中获得更高的分数。
有关此处使用的算法的详细信息,请参阅TFIDFSimilarity docs。
要了解查询文档的评分,您应该熟悉Explanation
。您可以按原样获得文档评分原因的可读解释:
Explanation explain = searcher.explain(myQuery, resultDocNo);
System.out.print(explain.ToString());
要识别与查询匹配的文档片段,您可以使用Highlighter
,其简单用法可能是:
QueryScorer scorer = new QueryScorer(myQuery);
Highlighter highlighter = new Highlighter(scorer);
String fragment = highlighter.getBestFragment(analyzer, fieldName, myDoc.getField(fieldName));