ElasticSearch无痛地确定该字段是源文档中的数组
Elasticsearch包含类似文档的内容ElasticSearch无痛地确定该字段是源文档中的数组,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,Elasticsearch包含类似文档的内容 { "array":["1","2"], "str": "123" } 带映射 "array" : { "type" : "text", "fields" : { "keyword"
{
"array":["1","2"],
"str": "123"
}
带映射
"array" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
},
"copy_to" : [
"all"
],
"norms" : false,
"analyzer" : "logspeak"
}
及
如果我这样做
Debug.explain(doc['array.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();
}
}
正确的无痛表达是:
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();
}
}
如中所述,elasticsearch中没有数组数据类型,当您使用字符串数组时,ES explain API返回
字符串
。如果您想知道数组的大小,请参阅@Val答案。如中所述,elasticsearch中没有数组数据类型,并且当您使用字符串数组时,ES explain API返回字符串。如果您想知道数组的大小,请查看@Val答案。实际上,doc['keyword-field']。值
与源文档中的数组“等效”(即大小相同),doc['keyword-field']。值
是“等效”(即大小相同)对于源文档中的数组,我是否更正理解为我无法确定1个元素的数组?我是否更正理解为我无法确定1个元素的数组?
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();
}
}