我需要的非常简单,但是我可能无法在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/

10-16 16:57
查看更多