5

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

4

1 回答 1

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]
于 2014-10-07T09:23:51.050 回答