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

伊戈尔·费多罗夫(Igor Fedorov)

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();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章