目前有一个比较变态的需求,文档有多个列,都是数值的,产品需求是通过几列计算出一个排序分,再通过几列计算出来一个显示分数(给用户看的)。
目前查询是这么写的(经过省略简化):
GET index/type/_search
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"functions": [
{
"script_score": {
"script": "return doc.a * 10 + doc.b * 1.2"
}
}
],
"score_mode": "max",
"boost_mode": "replace"
}
}
}
期望在返回的内容中可以通过_source.xxx
拿到另外一个显示分数,或者通过其他方式也行。
我的设想,其中doc.x
就是我想要的显示分数,通过结果中的_source.x
拿到对应的值,但是实际上这个无法工作:
GET index/type/_search
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"functions": [
{
"script_score": {
"script": "_doc.x = doc.a + doc.b; return _doc.a * 10 + _doc.b * 1.2"
}
}
],
"score_mode": "max",
"boost_mode": "replace"
}
}
}
ps:目前有其他的实现方案,通过返回的所有列,在得到结果后再计算一遍,但这样公式是分布在两个地方了。不太方便维护。。。 所以,期望让 es 返回可直接使用的值。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.