首页 文章

Elasticsearch:如何使聚合字段不改变值的大小写

提问于
浏览
4

我有一个聚合字段的以下映射:

"language" : {
    "type" : "string",
    "index": "analyzed",
    "analyzer" : "standard"
}

此属性中的示例文档的值可能如下所示:“en zh_CN”

除聚合外,此属性没有其他用途 . 我注意到当我在此属性上获得聚合结果时:

{
  "query": {
        "filtered" : {
            "query": { 
                    "match_all": {}
            },
            "filter" : {
                 ...
            }
        }
    },
    "aggregations": {
        "facets": {
            "terms": {
                "field": "language"
            }
        }
    }   
}

存储桶密钥值为小写 .

"aggregations" : {
    "facets" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [ {
        "key" : "zh_cn",
        "doc_count" : 2
      }, {
        "key" : "en",
        "doc_count" : 1
      } ]
    }
  }

如何在不让ES降低其值的情况下实现我的聚合目标 . 我觉得我可能需要更改此属性的映射,但不确定如何 .

感谢致敬 .

1 回答

  • 8

    请在映射中尝试此操作:

    "language" : {
        "type" : "string",
        "index": "not_analyzed"
    }
    

    每个文档的该字段中的文本将被使用,未经修改,以创建令牌,这些令牌将由您的术语聚合返回 . 对于您提供的示例值,聚合将逐字返回:

    "aggregations": {
       "facets": {
          "buckets": [
             {
                "key": "en zh_CN",
                "doc_count": 1
             }
          ]
       }
    }
    

    如果您仍希望在空格上对文本进行标记,则可以尝试在映射中使用whitespace analyzer

    "language": {
       "type": "string",
       "analyzer": "whitespace"
    }
    

    然后你的聚合将返回:

    "aggregations": {
       "facets": {
          "buckets": [
             {
                "key": "en",
                "doc_count": 1
             },
             {
                "key": "zh_CN",
                "doc_count": 1
             }
          ]
       }
    }
    

    这是我用来测试这两个例子的代码:

    http://sense.qbox.io/gist/a7b3c7d50c7012537c50d576d03940b28b5f8793

相关问题