当前位置: 首页 > 知识库问答 >
问题:

如何在ElasticSearch中搜索数组中的第一个元素?

冀鸿才
2023-03-14

我只想在数组中的第一个元素上搜索对象,而忽略其余的元素。例如,对于下面的数据,如果我只想在模型中搜索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“}这样的东西来每次搜索列表中的第一辆车。有什么方法可以有效地做到这一点吗?

共有1个答案

詹联
2023-03-14

看看这个答案--这样做当然是可能的,但相当麻烦。

相反,我建议使用

  • 摄取管道,由此将第一个车辆提取到新的根级字段或
  • 按查询更新,与上面的操作相同,但可以随意执行,而不是只在摄取时执行。
 类似资料:
  • 我正在使用Nest连接到ElasticSearch并执行一些查询。到目前为止,在给定一个通配符查询的情况下,我能够得到我想要的结果,如下所示: 但是现在我需要为某个用例的查询添加附加条件。 我需要的不仅是通过查询,还需要其他两个匹配的字段: 搜索术语"*" field 1="一些字符串" field="一些指南" 我确信在弹性搜索中一定有办法做到这一点(使用Nest),但我还没有找到它。 我知道我

  • 问题内容: 我对ES还是相当陌生,并正在将其用于我的新项目。首先,我为客户提供了一个简单的映射,其中包含名字和姓氏以及付款信息对象列表。如果我在SQL中执行此操作,那将类似于客户表和具有1:许多关系的付款信息表。 这是我要执行的操作的一个简单示例:https : //gist.github.com/anonymous/6109593 我希望根据payInfos嵌套数组中的任何匹配项找到任何客户,即

  • 问题内容: 可以说我们有一个名为acls的类,该类有一个名为lprop的List属性。 现在,让我说我还有另一个列表,其值分别为1,3,5,并且说此变量名称为tosearch。 我想通过使用巢来搜索elasticsearch索引中的acls类型记录lprop属性中的tosearch值,并且仅找到一个匹配项就足够了。 例如: 问题答案: 使用查询

  • 如果我有一个双打数组: 我想得到第一个元素和最后一个元素,这样 我该怎么做?

  • 问题内容: 我有一个JSON数组 我将如何搜索8097并获取内容? 问题答案: 使用该函数将JSON字符串转换为对象数组,然后遍历该数组直到找到所需的对象:

  • 这是我的阵列 我想做的是:写一个函数 例如:将返回18将返回19等等