我有一个类似
的架构{
mappings: {
business: {
properties: {
business_id: {type: integer}
business_category_ids: {type: integer}
price: {type: float}
}
}
}
}
我阅读了ES doc,我们可以使用function_score
来转换_score
,如下所示:
{
"size": 100,
"query": {
"function_score": {
"query": {
"term": {
"business_category_ids": 4
}
},
"script_score": {
"script": "_score * 1 / doc['price']"
}
}
}
}
并获得以下结果:
{
"hits": {
"hits": [
{
"_score": 4.12,
"_source": ..
},
{
"_score": 3.10,
"_source": ..
}
]
}
}
但是,在转换_score
之后,我们失去了在查询子句中获得的原始_score
的跟踪。但是我对原始_score
的后分析感兴趣。
我想知道是否有任何方法可以保留/记录原始的_score
?
我想到了两种方法,然后快速平移:
只需使用不带query
的{{1}}即可返回前100个文档(以script_score
而言为top),并在应用程序级别计算_score
。但是,在我的情况下,Elastic Search仅返回100个文档,并且基于_score* 1 / doc['price']
的前100个文档肯定与基于_score
的前100个文档不同
对所有文档进行弹性搜索并为其返回_score * 1 / doc['price']
。然后在应用程序级别,根据_score
对所有文档进行排序,然后选择前100个文档。在这种情况下,我可以同时获得1)前100个文档的准确排名2)_score * 1 / doc['price']
。但是,这非常耗时,因为我们必须返回数百万个文档...
Elastic Search是否提供任何功能来保留原始的_score
?