试试搜索一下吧

可不可以对Text字段解析后再做聚合?

Elasticsearch | 作者 xumenger | 发布于2020年05月20日 | 阅读数:1243

        在我们的场景中,使用ES存储各种请求接口的日志,像时间戳、客户端IP、请求接口、处理结果(错误码)等这些信息是固定格式的,可以设计一个特定索引来存储
        不同的请求接口,具体请求的内容不同,因为现在是将多种请求放到一起,所以对于请求的内容目前是使用一个text字段来存储的
        比如某种请求A的请求体内容是这样的
{users=[{name=zhangsan, age=10, address=杭州}, {name=lisi, age=18, address=上海}], city=[{name=杭州, desc=西湖}, {name=上海, desc=黄浦江}]}
        这个信息存储在text类型的loginfo字段

        现在有这样一个需求
        通过Filter将所有的请求A的数据过滤出来,然后针对loginfo字段想做解析后再聚合
        实现类似这样的效果
* 用户1在10:00:00到12:00:00这个时间段内请求的次数
* 用户1在10:00:00到12:00:00这个时间段内请求的成功率
* 等等

        目前我搜索到的信息是这样的,text类型的字段不支持聚合
        所以我现在想到的方案是,在收到类似上面原始日志内容的时候,将不同的请求放到不同的索引中存储
        针对每种请求自己的loginfo内容,对loginfo做解析,解析出想要的字段,存储为keyword类型
        然后就可以针对这些keyword完成上面的这些需求了

        但是我这里想问的是,ES、Kibana有没有原生的工具,先对loginfo做拆解,然后对拆解后的字段做聚合?
        这样的话,直接在ES、Kibana中就可以对text的字段做解析和聚合了

        跪求大神解答
已邀请:

hackerwin7 - aggregator

赞同来自:

解析后聚合意味着,同一条document可能在不同的bucket都有这条document?
匿名用户

匿名用户

赞同来自:

只能先提取出loginfo 公共的部分到字段,
如果 loginfo 里面是不固定的,那就不太好弄了.只能通过模板动态的匹配.
但是这样的话,也不能无限制的增加几十个字段,最好做限制.
 
 

要回复问题请先登录注册