Elasticsearch 2.3 has_child带有must_not.exists查询

时间:2016-08-03 08:59:24

标签: elasticsearch

我正在尝试构建一个查询,其中根据数组中的国家/地区代码过滤父项的子项。如果孩子没有国家/地区字段,我仍然希望返回结果。

我有两个工作查询:

log (n^20) = 20 log n

正式返回一系列结果,其中'AF'位于countries数组中,并且:

{
  "query": {
    "bool": {
      "should": {
        "has_child": {
          "inner_hits": {},
          "type": "service",
          "score_mode": "sum",
          "query": {
            "bool": {
              "filter": [
                {
                  "term": {
                    "countries": "AF"
                  }
                }
              ]
            }
          }
        }
      }
    }
  }
}

返回我想要的孩子没有国家/地区字段的结果。

我无法弄清楚如何将这两个查询组合起来得到一组合并的结果。也就是说我想要'或'这两套。

1 个答案:

答案 0 :(得分:0)

实际上没有对此进行测试,这是一个盲目的建议:

{
  "query": {
    "bool": {
      "should": {
        "has_child": {
          "inner_hits": {},
          "type": "service",
          "score_mode": "sum",
          "query": {
            "bool": {
              "must": [
                {
                  "bool": {
                    "should": [
                      {
                        "bool": {
                          "must": [
                            {
                              "exists": {
                                "field": "countries"
                              }
                            },
                            {
                              "term": {
                                "countries": "AF"
                              }
                            }
                          ]
                        }
                      },
                      {
                        "missing": {
                          "field": "countries"
                        }
                      }
                    ]
                  }
                },
                {
                  "term": {
                    "whatever": "blabla"
                  }
                }
              ]
            }
          }
        }
      }
    }
  }
}