ElasticSearch确定字段是源文档中的数组



Elasticsearch包含如下文档

{
"array":["1","2"],
"str": "123"
}

与映射

"array" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
},
"copy_to" : [
"all"
],
"norms" : false,
"analyzer" : "logspeak"
}

"str" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
},
"copy_to" : [
"all"
],
"norms" : false,
"analyzer" : "logspeak"
}

如果我做了

Debug.explain(doc['array.keyword']);

Debug.explain(doc['str.keyword']);

我得到两个字段的org.elasticsearch.index.fielddata.ScriptDocValues$Strings类型。

如何确定源字段类型?(我需要得到字符串长度,如果字段是简单的字符串或数组的大小,如果字段是数组)

正确的无痛表达是:

def size = -1;
if (doc['array.keyword'].size() > 0) {
// string case
if (doc['array.keyword'].size() == 1) {
size = doc['array.keyword'].value.length();
} 
// array case
else {
size = doc['array.keyword'].values.size();
}
}

正如ES官方文档中提到的,在elasticsearch中没有数组数据类型,当您使用字符串数组时,ES解释API返回String。如果你想知道你的数组的大小,请参阅@Val答案。

最新更新