当json在列表中时如何匹配?

vlf7wbxs  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(298)

有些人像这样绘制数据,

"item":[
        {"name":      "ABC" }
        {"brand":     "edf" },
        {"quantity":    12  }
       ]

我试着这样过滤:

"filter":
     {"term": {"item.brand": "edf}}

结果是:

"hits": {
    "total": {
        "value": 0,
        "relation": "eq"
    },

我知道 name , brand 以及 quantity 被放进一个 [] 主要问题:我们能在不改变Map方式的情况下过滤它吗?

实际案例:

"item": {
   "categories": [
                     {"deleted_at": null,
                      "description": {
                         "en": "Bun ",
                         "vi": "Bánh Bao "
                                     }
                      },
               ....
                  ]
        }

我的问题:

["filter":
{"nested": {"path":"item.categories",
        "query":{
                 "term":{"item.categories.description.en":"Bun "}
                }
       }
 }
 ]

出现以下错误:

"failed to create query: [nested] nested object under path [item.categories] is not of nested type",
fzsnzjdm

fzsnzjdm1#

可能是这样的 item 是嵌套类型,如果是这种情况,则需要使用 nested 这样查询:

{
  "query": {
    "bool": {
      "filter": {
        "nested": {
          "path": "item",
          "query": {
            "term": {
              "item.brand": "edf"
            }
          }
        }
      }
    }
  }
}

更新:
根据你得到的错误, item.categories 没有嵌套,因此您的初始查询是正确的。但是,您应该使用 match 而不是 term ,如下所示:

{
  "query": {
    "bool": {
      "filter": {
        "match": {
          "item.categories.description.en": "Bun"
        }
      }
    }
  }
}

相关问题