我如何在Elasticsearch中将两个查询的分数相乘



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

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

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

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

你将取"猫"one_answers"狗"的函数结果的乘积,并将它们添加到原始查询分数中。

以下是完整的查询要点

或者,如果你在bf中有一些足够重量级的东西,你不想在整个比赛集中运行它,你可以使用rescore请求来修改排名前N的ORIGINAL QUERY结果使用随后的得分传递(猫,狗等)得分查询。

相关内容

  • 没有找到相关文章

最新更新