OR查询嵌套对象ElasticSearch

时间:2018-01-12 11:56:48

标签: elasticsearch

我使用的是ElasticSearch 1.7.5版本,我正在尝试获取丢失某些字段的所有文档。

我的映射:

...
"participant": {
    "properties": {
        "id": {
            "type": "string"
        },
        "firstName": {
            "type": "string"
        },
        "lastName": {
            "type": "string"
        },
        "name": {
            "type": "string"
        }
},
"coordinator": {
    "properties": {
        "id": {
            "type": "string"
        },
        "firstName": {
            "type": "string"
        },
        "lastName": {
            "type": "string"
        },
        "name": {
            "type": "string"
        }
}
...

我想查询尚未分配c oordinator.id或participant.id 的所有文档。

我的查询如下:

"query": {
    "nested": {
        "path": "coordinator, participant",
        "query": {
            "constant_score": {
                "filter": {
                    "or": [
                        {
                            "missing": {
                                "field": "coordinator.id"
                            }
                        },
                        {
                            "missing": {
                                "field": "participant.id"
                            }
                        },
                    ]
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您通过bool查询进行OR查询:

https://www.elastic.co/guide/en/elasticsearch/reference/1.7/query-dsl-bool-filter.html

所以这个查询会起作用:

{
  "query": {
    "bool": {
      "should": [
        {
          "constant_score": {
            "filter": {
              "missing": {
                "field": "participant.id"
              }
            }
          }
        },
        {
          "constant_score": {
            "filter": {
              "missing": {
                "field": "coordinator.id"
              }
            }
          }
        }
      ]
    }
  }
}

我注意到您使用的是嵌套查询,但映射并未声明协调器和参与者是嵌套字段类型,因此不起作用:

https://www.elastic.co/guide/en/elasticsearch/reference/1.7/mapping-nested-type.html

将某些内容设置为嵌套类型仅在您需要将搜索项组合在一起时才有用,因此我认为您不需要这样做。