gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 22:20:08 28 4
gpt4 key购买 nike

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

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

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

我可以使用那些结构:
"aggs": {
"deviceAggs": {
"terms": {
"script": "doc['strArray'][1]"
}
}
}

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

我怎样才能做到这一点 ?我考虑几种方法:
  • 脚本-使用像子字符串这样的函数,仅获取“正确”的值。
  • 过滤-可以从数组中过滤一个值(包含字符串“device:”)。
  • 对strArray值进行排序以将所有值按确定的顺序排列,但是“sort”给我奇怪的结果-仅返回一个元素(不进行任何过滤)。

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

    最佳答案

    脚本只能在这里直接进行。
    要了解如何在聚合中使用脚本,可以引用此blog

    像下面的东西应该工作

    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),然后对数据进行嵌套聚合。

    关于arrays - 从ElasticSearch的字符串数组中仅返回一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32267629/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com