【问题标题】:elasticsearch dynamic query - Add another field to each document returnedelasticsearch 动态查询 - 向返回的每个文档添加另一个字段
【发布时间】:2014-12-01 00:15:05
【问题描述】:

我需要的东西很简单,但我无法在 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 elasticsearch-jdbc-river elasticsearch-plugin pyelasticsearch spring-data-elasticsearch


【解决方案1】:

我使用脚本字段进行了此操作。参考:

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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多