1

我有一个索引“tag_nested”,其中包含以下类型的数据:

{
    "jobid": 1,
    "table_name": "table_A",
    "Tags": [
      {
        "TagType": "WorkType",
        "Tag": "ETL"
      },
      {
        "TagType": "Subject Area",
        "Tag": "Telecom"
      }
    ]
}

当我通过触发以下查询来触发查询以过滤“Tag”和“TagType”上的数据时:

POST /tag_nested/_search
{
    "query": {
        "bool": {
            "must": {"match_all": {}},
            "filter": [
                {"term": {
                    "Tags.Tag.keyword": "ETL"
                }},
                 {"term": {
                    "Tags.TagType.keyword": "WorkType"
                }}
            ]
        }
    }
}

它给了我以下输出。我面临的问题是,上面的查询过滤了没有过滤数据的文档,但它显示了该文档的所有“标签”,而不仅仅是过滤器一个

{
        "_index" : "tag_nested",
        "_type" : "_doc",
        "_id" : "9",
        "_score" : 1.0,
        "_source" : {
          "jobid" : 1,
          "table_name" : "table_A",
          "Tags" : [
            {
              "TagType" : "WorkType",
              "Tag" : "ETL"
            },
            {
              "TagType" : "Subject Area",
              "Tag" : "Telecom"
            }
          ]
        }
      }

而不是上面的结果,我希望我的输出是这样的:

{
        "_index" : "tag_nested",
        "_type" : "_doc",
        "_id" : "9",
        "_score" : 1.0,
        "_source" : {
          "jobid" : 1,
          "table_name" : "table_A",
          "Tags" : [
            {
              "TagType" : "WorkType",
              "Tag" : "ETL"
            }
          ]
        }
      }
4

1 回答 1

0

已经在这里这里这里回答了。

TL;DR,您需要将您的Tags字段设为 type nested,重新同步您的索引并用于inner_hits仅获取适用的标签组。

于 2020-06-01T20:16:44.083 回答