ElasticSearch Aggregarion - 按计数分组而不分析字段

ElasticSearch Aggregarion - Group by count without analyzing field

我们的索引中有一个字段类别,我们想使用聚合查询获取每个类别的记录数。

GET /_search
{
    "aggs" : {
        "genres" : {
            "terms" : { "field" : "category" } 
        }
    }
}

我们正在获取结果,但它是在分析类别后给出结果。像这样

           {
                "key": "chil",
                "doc_count": 343503
            },
            {
                "key": "child",
                "doc_count": 343503
            },
            {
                "key": "childr",
                "doc_count": 343503
            },
            {
                "key": "childre",
                "doc_count": 343503
            },

但是我想要不分析的结果,希望可以,谁能帮我查询一下。

预计

            {
                "key": "children",
                "doc_count": 343503
            },
            {
                "key": "Category1",
                "doc_count": 43503
            },
            {
                "key": "Category2",
                "doc_count": 60000
            }

我们正在为映射中的字段 categoryqu 提供自动完成分析器

        "name": {
          "type": "string",
          "analyzer": "autocomplete",
          "search_analyzer": "standard"
        }

谢谢

尝试在 .keyword 上聚合。但是从它的样子来看,您还没有在映射中指定关键字字段。

所以像这样调整你的映射:

{
  "category":{
    "type":"text",

    "fields":{
      "keyword":{
        "type":"keyword",
        "ignore_above":256
      },

      "name":{
        "analyzer":"autocomplete",
        "search_analyzer":"standard",
        "type":"text"
      }
    }
  }
}

和运行以下

GET /_search
{
  "aggs":{
    "genres":{
      "terms":{
        "field":"category.keyword"
      }
    }
  }
}

注意:在 category 上执行搜索将使用 ES-默认文本映射。使用 category.name 将使用您指定的分析器和搜索分析器。 searching/aggregating on category.keyword 将对区分大小写的关键字执行操作——这正是您所期望的。