如何在Elasticsearch中将两个查询的得分相乘?

JnB*_*ymn 5 relevance elasticsearch function-query

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

Elasticsearch的搜索API通常更灵活,但我无法弄清楚如何实现同样的壮举.我可以_score在function_query的script_function中使用,但我只能使用_score主查询.如何合并其他查询的分数?我怎样才能将得分相乘?

Pet*_*ses 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)"
Run Code Online (Sandbox Code Playgroud)

您可以将“猫”和“狗”的这些函数结果相乘,并将它们添加到原始查询分数中。

这是完整的查询要点