我需要的是非常简单,但我无法在Elasticsearch中找到如何做到这一点,可能是因为需要完成的事情很复杂。
输入(两个示例JSON文档)
{ "car" : 150, "bike" : 300 }
{ "car" : 100, "bike" : 200}
我想要的是,当我触发搜索查询时,它会返回带有额外字段inventory
的文档,该字段被定义为汽车和自行车数量的总和。并按排序顺序。
示例输出:
hits: [
{ "car" : 150, "bike" : 300, "inventory": 450},
{ "car" : 100, "bike" : 200, "inventory": 300}
]
有可能在elasticsearch中做这样的事情吗? (我假设使用动态脚本)
答案 0 :(得分:4)
我是使用脚本字段完成的。参考:
示例查询:
query: {
...
},
script_fields: {
inventory: {
script: "doc['car'].value + doc['bike'].value"
}
}
这会产生一个单独的字段列,每个匹配为:
fields: {
inventory: [450]
}
但是,因为我也希望对它进行排序,所以我最终使用了排序:
query: {
...
},
sort: {
_script: {
script: "doc['car'].value + doc['bike'].value",
type: "number",
order: "desc"
}
}
每次点击都会返回一个排序字段,例如:
sort: [450]