elasticsearch动态查询 - 为返回的每个文档添加另一个字段

时间:2014-10-06 17:12:14

标签: elasticsearch elasticsearch-jdbc-river elasticsearch-plugin pyelasticsearch spring-data-elasticsearch

我需要的是非常简单,但我无法在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中做这样的事情吗? (我假设使用动态脚本)

1 个答案:

答案 0 :(得分:4)

我是使用脚本字段完成的。参考:

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]
}

但是,因为我也希望对它进行排序,所以我最终使用了排序:

query: {
...
},
sort: {
    _script: {
        script: "doc['car'].value + doc['bike'].value",
        type: "number",
        order: "desc"
    }
}

每次点击都会返回一个排序字段,例如:

sort: [450]