从ElasticSearch的字符串数组中仅返回一个元素

烟台

我在一个字段“ strArray”中有字符串数组:

strArray: ['browser:IE', 'device:PC', 'country:USA', 'state:CA']

我需要按浏览器(设备,国家或地区)进行汇总。如果我知道strArray字段中这些值的顺序,那不是问题。

我可以使用那些结构:

"aggs": {
  "deviceAggs": {
    "terms": {
      "script": "doc['strArray'][1]"
    }
  }
}

但是问题在于插入这些字符串的顺序可能不同。

我怎样才能做到这一点 ?我考虑了几种方法:

  1. 脚本-使用像子字符串这样的函数,仅获取“正确”的值。

  2. 过滤-可以从数组中过滤一个值(其中包含字符串“ device:”)。

  3. 将strArray值排序以将所有值按确定的顺序排序,但是“排序”给我带来奇怪的结果-仅返回一个元素(不进行任何过滤)。

不要问我,为什么我有这个结构(这不是我的选择),如果我们有结构键:值-我们不会有问题。

维尼思·莫汉(Vineeth Mohan)

脚本只能在这里直接进行。要了解如何在聚合中使用脚本,请参考此博客

像下面这样的东西应该工作

for(element in doc['strArray'].values){
      if(element.startsWith('browser')){
          return element;
      }
};
return null;

排序和过滤都是在文档级别而不是元素级别完成的。在元素级别,如果可以将此数组设置为nested,则可以进行过滤。首先,您需要将结构更改为-

strArray: [
  { "name" : 'browser:IE' } , 
  { "name" : 'device:PC' } 
 ]

然后将strArray字段设置为嵌套。在这种情况下,您可以基于前缀查询进行嵌套过滤(使用query filter),然后对数据进行嵌套聚合。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在PySpark中创建一个udf并返回一个字符串数组?

字符串拆分返回一个包含两个元素而不是一个元素的数组

仅按golang中的第一个元素分割字符串

从熊猫数据框中仅提取一个字符串元素

在Typescript中,我如何声明一个返回字符串类型数组的函数?

在scala中的数组上不同返回一个空字符串

从定界字符串中仅提取一个元素的有效方法

如何从字符串数组中“删除”一个元素

查找字符串中任何一个数组元素的首次出现-Powershell

如何用另一个参数的字符串替换数组中的元素

从第一个元素中获取特定字符串-数组

在数组中查找字符串并返回列的第一个值

字符串拆分SQL函数仅返回字符串中的第一个单词

字符串数组在android中仅返回一个字符串

给定一个字符串数组,返回仅包含回文的字符串数组

仅显示最后一个字符串的字符串数组

数组中基于字符串“ direction”的上一个或下一个元素

更改字符串数组中的最后一个元素

C#删除重复项仅检查字符串数组的第一个元素

数组仅返回一个元素

在Ruby中创建一个接受数组并返回字符串的方法

搜索字符串数组列表以在匹配元素中查找值并返回同一数组中的另一个元素

检索存储在 JSON 中的数组中的字符串值仅返回字符串的第一个字符

如果对象中的一个元素包含字符串,则 Javascript 从数组中删除对象

在另一个数组中查找数组的字符串元素

从数组数组中返回一个包含特定字符串的数组

从字符串数组中返回一个长度等于输入整数的字符串

从对象数组中的元素创建一个字符串

如何仅保留作为子字符串存在于另一个数组中的数组元素