ElasticSearch 查询嵌套数组中的文档

如何解决ElasticSearch 查询嵌套数组中的文档

我在弹性搜索索引中有一条记录:-

 "hits" : {
"total" : {
  "value" : 1,"relation" : "eq"
},"max_score" : 0.0,"hits" : [
  {
    "_index" : "index","_type" : "_doc","_id" : "C3wfF3kBVSP1PGuoao73","_score" : 0.0,"_source" : {
      "rId" : 1066,“categoriesData" : [
        {
          "categoryNumber" : 13,"depNumber : 98,"storeIds" : [
            "3","6"
          ],"fData" : {
            "Type" : “Single
          }
        },{
          "categoryNumber" : 12,"depNumber" : 97,"storeIds" : [
            "3629","3628"
          ],"Data" : {
            "Type" : “DOUBLE
          }
        }
      ],"sId" : "35EB8012-AA52-4872-A1A2-92522BD3925F"
    }
  }
]

}

这里的类别数据是嵌套的。我正在尝试查询 categoryNumber 13 和 depNumber 98。我只想要带有 categoryNumber 13 和 depNumber 98 的 dict 对象

    This is my query:- 
    GET /index/_search
     {
     "query": {
       "bool": {
         "must": [
        {
          "nested": {
             "path": "categoriesData","query": {
             "bool": {
              "must": [
              {
                "term": {
                  "categoriesData.categoryNumber": 13
                }
              },{
                "term": {
                  "categoriesData.depNumber": 98
                }
              }
            ]
          }
        }
      }
    }
  ]
  }
  }
 }

当尝试上面的查询时,它给了我所有的文件。我的要求是只获取带有 depNumber 和分类号的文件 预期输出:- 嵌套字段中只有一个对象。

   "categoriesData" : [
    {
      "categoryNumber" : 13,"storeIds" : [
        "3","6"
      ],"fData" : {
        "Type" : “Single
      }
    }

我的映射:-

     {"mappings": {"properties": 
                                    {"rId": {  "type": "integer"},"sId": { "type": "keyword" },"CategoriesData" : {"type":"nested","properties" :{"depnumber”: {"type":"integer"},"categoryNumber”: {"type":"integer"},"storeIds": {"type":"keyword"},"fData" : {"type":"object"}}}}}}

有什么方法可以编写查询以仅获取具有匹配项的特定对象

解决方法

您可以使用 inner_hits 从嵌套文档中仅获取完全匹配的对象

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "categoriesData","query": {
              "bool": {
                "must": [
                  {
                    "term": {
                      "categoriesData.categoryNumber": 13
                    }
                  },{
                    "term": {
                      "categoriesData.depNumber": 98
                    }
                  }
                ]
              }
            },"inner_hits":{}         // note this
          }
        }
      ]
    }
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?