在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
结果使用随后的得分传递(猫,狗等)得分查询。