我需要的非常简单,但是我可能无法在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中可以做这样的事情吗? (我假设使用动态脚本)
最佳答案
我使用脚本字段来完成此操作。引用:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-script-fields.html
示例查询:
query: {
...
},
script_fields: {
inventory: {
script: "doc['car'].value + doc['bike'].value"
}
}
这将导致一个单独的字段列,每个匹配项为:
fields: {
inventory: [450]
}
但是,由于我也希望对此进行排序,因此最终使用了sort:
query: {
...
},
sort: {
_script: {
script: "doc['car'].value + doc['bike'].value",
type: "number",
order: "desc"
}
}
每次点击都会给我返回一个排序字段,例如:
sort: [450]
关于elasticsearch动态查询-向返回的每个文档中添加另一个字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26221274/