弹性搜索:匹配不同嵌套对象中的字段

时间:2017-05-18 06:48:37

标签: search

我是Elastic Search的新手,这是我的用户索引:

{
"user": {
"properties": {
  "branches": {
    "type": "nested"
  },
  "lists": {
    "type": "nested"
  },
  "events": {
    "type": "nested"
  },
  "optOuts": {
    "type": "nested"
  }
}
}
}

这里,分支,事件和列表将包含字段id(int),countryIso(String)..

我需要找到拥有属于countryIso' XX'的电子邮件的用户。例如。

{
"query": {
"bool": {
  "must": [
    {
      "exists": {
        "field": "email"
      }
    },
    {
      "match": {
        "prog_id": 3
      }
    },
    {
      "nested": {
        "path": [
          "branches"
        ],
        "query": {
          "query_string": {
            "fields": [
              "branches.countryIso"
            ],
            "query": "AE KW"
          }
        }
      }
    }
  ]
}
}
}

这样我就可以在分支对象中拥有该国家。我想要的是国家也在分支机构或名单或事件中。 注意:这些中的任何一个都可能是空的,即分支可能不存在或者列表不存在等等。或者列表可能没有countryIso ..

我试过了:

{
 "query": {
"bool": {
  "must": [
    {
      "exists": {
        "field": "email"
      }
    },
    {
      "match": {
        "prog_id": 3
      }
    },
    {
      "nested": {
        "path": [
          "branches"
        ],
        "query": {
          "query_string": {
            "fields": [
              "branches.countryIso"
            ],
            "query": "AE KW"
          }
        }
      }
    },
    {
      "nested": {
        "path": [
          "lists"
        ],
        "query": {
          "query_string": {
            "fields": [
              "lists.countryIso"
            ],
            "query": "AE KW"
          }
        }
      }
    }
  ]
}
}
}

{
"query": {
"bool": {
  "must": [
    {
      "exists": {
        "field": "email"
      }
    },
    {
      "match": {
        "prog_id": 3
      }
    },
    {
      "nested": {
        "path": [
          "branches",
          "lists"
        ],
        "query": {
          "query_string": {
            "fields": [
              "branches.countryIso",
              "lists.countryIso"
            ],
            "query": "AE KW"
          }
        }
      }
    }
  ]
}
 }
}

但两者都不起作用。

0 个答案:

没有答案