elasticsearch 有没有办法将弹性搜索字段类型从小写转换为标题?,elasticsearch,search,logstash,elk,elasticsearch,Search,Logstash,Elk" /> elasticsearch 有没有办法将弹性搜索字段类型从小写转换为标题?,elasticsearch,search,logstash,elk,elasticsearch,Search,Logstash,Elk" />

elasticsearch 有没有办法将弹性搜索字段类型从小写转换为标题?

elasticsearch 有没有办法将弹性搜索字段类型从小写转换为标题?,elasticsearch,search,logstash,elk,elasticsearch,Search,Logstash,Elk,我对其中一个关键字段的弹性搜索输出将以所有小写字母填充,如下所示 { "key" : "activatedevice", "doc_count" : 2 }, 有没有办法将映射添加到此字段,以便我的输出如下所示 { "key" : "ActivateDevice", "doc_count" : 2 }' 目前,我已为此键定义了映射,如下所示 "Call

我对其中一个关键字段的弹性搜索输出将以所有小写字母填充,如下所示

   {
"key" : "activatedevice",
"doc_count" : 2
},
有没有办法将映射添加到此字段,以便我的输出如下所示

   {
"key" : "ActivateDevice",
"doc_count" : 2
}'
目前,我已为此键定义了映射,如下所示

"CallingServiceName": {
                  "index": "not_analyzed",
                  "type": "string"
               },
如何实现这一目标,有什么建议吗


谢谢

猜测这种连接字符串的单词边界是相当困难的

如果字符串是空格分隔的(或具有任何其他可拆分模式),则可以使用以下聚合脚本将
CallingServiceName
转换为
TitleCase

{
  "size": 0,
  "aggs": {
    "by_csn": {
      "terms": {
        "script": {
          "source": """
             String toTitleCase(def s){
               def parts = / /.split(s);
               String titleCaseString = "";
               for (def part : parts){
                  titleCaseString = titleCaseString + toProperCase(part);
               }
               return titleCaseString;
            }
            
            String toProperCase(def s) {
                return s.substring(0, 1).toUpperCase() +
                           s.substring(1).toLowerCase();
            }
            

            return toTitleCase(doc['CallingServiceName.keyword'].value);
          """
        },
        "size": 10
      }
    }
  }
}

请注意,您传递给
toTitleCase
函数的字段需要为
关键字类型
,或者在映射中将
字段数据
设置为true。

谢谢Joe,遵循了您建议的方法,效果良好。接受你的回答。