栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

ElasticSearch映射对分组文档执行折叠/执行操作的结果

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ElasticSearch映射对分组文档执行折叠/执行操作的结果

我用

scripted_metric
弹性的解决了。而且,的
index
状态已从初始状态更改。

剧本:

{   "size": 0,   "aggs": {        "intentPathsCountAgg": { "scripted_metric": {     "init_script": "state.messagesList = new ArrayList();",     "map_script": "long currentMessageTime = doc['messageReceivedEvent.context.timestamp'].value.millis; Map currentMessage = ['conversationId': doc['messageReceivedEvent.context.conversationId.keyword'], 'time': currentMessageTime, 'intentsPath': doc['brainQueryRequestEvent.brainQueryRequest.user_data.intentsHistoryPath.keyword'].value]; state.messagesList.add(currentMessage);",       "combine_script": "return state",     "reduce_script": "List messages = new ArrayList(); Map conversationsMap = new HashMap(); Map intentsMap = new HashMap(); String[] ifElseWorkaround = new String[1]; for (state in states) { messages.addAll(state.messagesList);} messages.stream().forEach((message) -> { Map existingMessage = conversationsMap.get(message.conversationId); if(existingMessage == null || message.time > existingMessage.time) { conversationsMap.put(message.conversationId, ['time': message.time, 'intentsPath': message.intentsPath]); } else { ifElseWorkaround[0] = ''; } }); conversationsMap.entrySet().forEach(conversation -> { if (intentsMap.containsKey(conversation.getValue().intentsPath)) { long intentsCount = intentsMap.get(conversation.getValue().intentsPath) + 1; intentsMap.put(conversation.getValue().intentsPath, intentsCount); } else {intentsMap.put(conversation.getValue().intentsPath, 1L);} }); return intentsMap.entrySet().stream().map(intentPath -> [intentPath.getKey().toString(): intentPath.getValue()]).collect(Collectors.toSet()) " }        }    }}

格式化脚本(为了提高可读性-使用.ts):

scripted_metric: {  init_script: 'state.messagesList = new ArrayList();',  map_script: `    long currentMessageTime = doc['messageReceivedEvent.context.timestamp'].value.millis;    Map currentMessage = [      'conversationId': doc['messageReceivedEvent.context.conversationId.keyword'],      'time': currentMessageTime,      'intentsPath': doc['brainQueryRequestEvent.brainQueryRequest.user_data.intentsHistoryPath.keyword'].value    ];    state.messagesList.add(currentMessage);`,  combine_script: 'return state',  reduce_script: `    List messages = new ArrayList();    Map conversationsMap = new HashMap();    Map intentsMap = new HashMap();    boolean[] ifElseWorkaround = new boolean[1];    for (state in states) {      messages.addAll(state.messagesList);    }    messages.stream().forEach(message -> {      Map existingMessage = conversationsMap.get(message.conversationId);      if(existingMessage == null || message.time > existingMessage.time) {        conversationsMap.put(message.conversationId, ['time': message.time, 'intentsPath': message.intentsPath]);      } else {        ifElseWorkaround[0] = true;      }    });    conversationsMap.entrySet().forEach(conversation -> {      if (intentsMap.containsKey(conversation.getValue().intentsPath)) {        long intentsCount = intentsMap.get(conversation.getValue().intentsPath) + 1;        intentsMap.put(conversation.getValue().intentsPath, intentsCount);      } else {        intentsMap.put(conversation.getValue().intentsPath, 1L);      }    });    return intentsMap.entrySet().stream().map(intentPath -> [      'path': intentPath.getKey().toString(),      'count': intentPath.getValue()    ]).collect(Collectors.toSet())`

答案:

{    "took": 2,    "timed_out": false,    "_shards": {        "total": 5,        "successful": 5,        "skipped": 0,        "failed": 0    },    "hits": {        "total": { "value": 11, "relation": "eq"        },        "max_score": null,        "hits": []    },    "aggregations": {        "intentPathsCountAgg": { "value": [     {         "smallTalk.greet -> smallTalk.greet2 -> smallTalk.greet3": 2     },     {         "smallTalk.greet -> smallTalk.greet2 -> smallTalk.greet3  -> smallTalk.greet4": 1     },     {         "smallTalk.greet -> smallTalk.greet2": 1     } ]        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/397821.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号