Elasticsearch count terms 忽略大小写

Elasticsearch count terms Ignore cases

以下是我的汇总。

{
    "size": 0,
    "aggs": {
        "cities": {
            "terms": {
               "field": "city.raw"
           }
    }
}

映射

"properties": {
    "state" : {
      "type": "string",
      "fields": {
        "raw" : {
          "type": "string",
          "index": "not_analyzed"
        }
      }
    }

效果很好。但它根据区分大小写对字段进行分组。

例如。

{
    "key": "New York",
    "doc_count": 45
},
{
    "key": "new york",
    "doc_count": 11
},
{
    "key": "NEW YORK",
    "doc_count": 44
}

我想要这样的结果

{
    "key": "new york",
    "doc_count": 100
}

我认为问题在于你使用了索引字符串的原始版本

city.raw

您没有提交的任何分析版本? 如果你把字段的映射也放到例子里就好了

更新:您应该根据需要使用自定义分析器。分词器应为关键字,过滤器应为小写。然后用这个分析器索引你的数据。然后应该工作。

            "analyzer": {
                "my_analyzer": {
                    "type":         "custom",                       
                    "tokenizer":    "keyword",
                    "filter":       "lowercase"
                }   
            }

还有一些信息KeyWord Analyzer and Custom Analyzers