【问题标题】:How to search first element in array in elasticsearch?如何在elasticsearch中搜索数组中的第一个元素?
【发布时间】:2020-11-28 00:37:56
【问题描述】:

我只想在数组中的第一个元素上搜索对象,而忽略其余部分。 例如,对于下面的数据,如果我只想在 model 中搜索 vehicle 数组中的第一个元素。

{
  "drivers" : [
    {
        "last_name" : "McQueen",
        "vehicle" : [
            {
                "make" : "Powell Motors",
                "model" : "Canyonero"
            },
            {
                "make" : "Miller-Meteor",
                "model" : "Ecto-1"
            }
        ]
    },
    {
        "last_name" : "Buzz",
        "vehicle" : [
            {
                "make" : "Powell Motors",
                "model" : "Canyonero"
            },
            {
                "make" : "Miller-Meteor",
                "model" : "Ecto-1"
            }
        ]
    }
}

我知道我可以进行这样的嵌套查询,但这里的问题是搜索了所有车辆。我只想搜索车辆列表中的第 0 个元素,而忽略其余元素。

{
  "query": {
    "nested": {
      "path": "driver",
      "query": {
        "nested": {
          "path": "driver.vehicle",
          "query": {
            "bool": {
              "must": [
                { "match": { "drivers.vehicle.model": "Canyonero" } }
              ]
            }
          }
        }
      }
    }
  }
}

理想情况下,我希望像{ drivers.vehicle[0].model": "Canyonero" } 这样每次都搜索列表中的第一辆车。有什么方法可以有效地做到这一点?

【问题讨论】:

    标签: elasticsearch amazon-elastic-beanstalk elastic-stack elasticsearch-5


    【解决方案1】:

    看看这个answer——这样做当然是可能的,但相当繁重。

    我建议使用

    • ingest pipelines 从而将第一辆车提取到新的根级字段或
    • updating by query 执行与上述相同的操作,但可以随意执行,而不是仅在摄取时执行。

    【讨论】:

      猜你喜欢
      • 2013-06-05
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 2022-10-21
      • 2021-10-27
      • 1970-01-01
      相关资源
      最近更新 更多