首页 > 解决方案 > ELASTICSEARCH - 过滤内部点击中的值

问题描述

在这个查询中,我想从最新的文档中获取字段 witg values "data.addresses.ces.cp": "true"",然后它返回 true 值,比如 false 我怎么才能只过滤 true?

{ "_source": "created_at",
  "size": 1, 
  "sort": [
    {
      "created_at.keyword": {
        "order": "desc"
      }
    }
  ], 
  "query": {
    "nested": {
      "path": "data.addresses",
      "inner_hits": {
        "_source": ["data.addresses.ces.secondname", "data.addresses.ces.cp"],
        "size":100
      },
      "query": {
        "nested": {
          "path": "data.addresses.ces",
          "query": {
            "match": {
              "data.addresses.ces.cp": "true"
            }
          }
        }
      }
    }
  }

    
  

输出:

                "ces" : [
                  {
                    "secondname" : "lopez",
                    "cp" : true
                  },
                  {
                    "secondname" : "gomez",
                    "cp" : false          <--------------- error
                  },
                  {
                    "secondname" : "garcia",
                    "cp" : false         <---------------error
                  }
                ]
              }
            },

标签: elasticsearch

解决方案


为什么你会查询data.addresses.services.cp但你想检索有点令人困惑data.addresses.ces.cp。这是什么ces?是服务的错字

在任何情况下,正如@Val 建议的那样,您可以将另一个inner_hits放入最里面的嵌套查询中:

{
  "_source": [
    "created_at"
  ],
  "size": 10,
  "query": {
    "nested": {
      "inner_hits": {
        "size": 100,
        "name": "ih_addresses"
      },
      "path": "data.addresses",
      "query": {
        "nested": {
          "inner_hits": {
            "name": "ih_services"
          },
          "path": "data.addresses.services",
          "query": {
            "match": {
              "data.addresses.services.cp": true
            }
          }
        }
      }
    }
  }
}

请注意,inner_hits可以有一个name属性来区分一个和另一个。


推荐阅读