5

在 Solr 中,我可以使用query函数 query 来返回查询的数字分数,我可以在bf参数的上下文中使用它,比如bf=product(query('cat'),query('dog'))将两个相关性分数相乘。

Elasticsearch 的搜索 API 通常使用起来更灵活,但我不知道如何完成同样的壮举。我可以_score在 function_query 的 script_function 中使用,但我只能使用_score主查询的。如何合并另一个查询的分数?我怎样才能将分数相乘?

4

2 回答 2

2

您可以使用查询编写 TF*IDF 评分函数function_score。像这样的东西(忽略 Lucene 的查询和长度规范化):

"script": "tf = _index[field][term].tf(); idf = (1 + log ( _index.numDocs() / (_index[field][term].df() + 1))); return sqrt(tf) * pow(idf,2)"

您将获取 'cat' 和 'dog' 的这些函数结果的乘积,并将它们添加到您的原始查询分数中。

这是完整的查询要点

于 2015-08-03T15:29:05.377 回答
1

或者,如果您有bf足够重量级的东西,您宁愿不在整组比赛中运行它,您可以使用重新评分请求来修改前 N 名排名ORIGINAL QUERY结果的得分,并使用您的 (cat ,狗等...)评分查询。

于 2015-08-03T15:44:47.480 回答