【问题标题】:ElasticSearch Query documents in nested arrayElasticSearch 在嵌套数组中查询文档
【发布时间】:2021-07-21 15:16:37
【问题描述】:

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

 "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"
    }
  }
]

}

这里 categoriesData 是嵌套的。我正在尝试查询 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,
      "depNumber : 98,
      "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"}}}}}}

      

有没有办法编写查询以仅获取具有匹配项的特定对象

【问题讨论】:

    标签: elasticsearch elasticsearch-query elasticsearch-7


    【解决方案1】:

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

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

    【讨论】:

    • @CodeCool 请仔细阅读答案,如果这能解决您的问题,请告诉我?
    • @ESCoder 它会工作。但它给出了多次点击。在大型数据集的情况下如何工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2018-03-09
    • 2019-12-25
    相关资源
    最近更新 更多