在嵌套文档中进行嵌套过滤时对嵌套文档中的文档进行InnerHits

时间:2019-06-25 06:46:07

标签: elasticsearch

我有以下类型的映射:

{
  "mapping": {
    "properties": {
      "id": {
        "type": "String",
        "index": "not_analyzed"
      },
      "tags": {
        "type": "nested",
        "properties": {
          "id": {
            "type": "String",
            "index": "not_analyzed"
          },
          "tag_value": {
            "type": "nested",
            "properties": {
              "tagId": {
                "type": "String",
                "index": "not_analyzed"
              },
              "label": {
                "type": "String",
                "index": "not_analyzed"
              }
            }
          }
        }
      }
    }
  }
}

所需的输出是获取tag_value的innerHits,但仅获取某些特定tag.id的tag_value的文档。

{
  "_source": {
    "includes": [
      "id"
    ]
  },
  "query": {
    "bool": {
      "filter": [
        {
          "ids": {
            "values": [
              "021a9586-82de-4cbd-a651-e0b403d2b6da",
              "fee6e022-442d-419f-943f-ad2859013330"
            ]
          }
        },
        {
          "nested": {
            "path": "tags",
            "query": {
              "bool": {
                "must": [
                  {
                    "term": {
                      "id": "xyz"
                    }
                  },
                  {
                    "nested": {
                      "path": "tags.tag_value",
                      "query": {
                        "bool": {
                          "must": [
                            {
                              "terms": {
                                "tags.tag_value.tagId": [
                                  "english",
                                  "portugese"
                                ]
                              }
                            }
                          ]
                        }
                      },
                      "inner_hits": {
                        "size": 4,
                        "_source": {
                          "includes": [
                            "tagId",
                            "label"
                          ]
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

我已经尝试了上面的查询,但是没有返回innerHits。 我也曾尝试直接查询第二级嵌套文档,但是后来我无法根据第一级嵌套文档的ID过滤匹配。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您还需要在第一个嵌套查询中添加inner_hits

 {
    "nested": {
    "path": "tags",
    "inner_hits": {}, <-- here
    "query": {
        "bool": {