问题描述
我正在尝试在分析仪中的分析仪中使用分析仪,并在合理的情况下对其进行汇总。
例如
KEY_DOWN
当前,我有一个自定义模式分析器,该分析器通过'|'索引术语模式,将Field1.value和Field2.value分为:
Field1.value: 'A01/00 | A02/01 | B01/00'
Field2.value: 'A01/01 | C02/01 | D01/00'
如果我现在进行汇总,则每个术语的计数值为1。
我想要实现的是通过另一个模式分析器通过正斜杠('/')模式进一步分析这些结果,从而创建:
Field1.value terms: [A01/00,A02/01,B01/00]
Field2.value terms: [A01/01,C02/01,D01/00]
这现在将导致A01项聚合值返回2,这就是我想要的。
我已经在我的弹性Java API代码中尝试了一种轻松的脚本:
Field1.value final terms: [A01,A02,B01]
Field2.value final terms: [A01,C02,D01]
这给了我我想要的“最终”字词,但只返回了第一个竖线“ |”之前的第一个字词而我想要所有最后的条款。
ei。
new Script(ScriptType.INLINE,"painless","def path = doc['field.analyzer'].value; " +
"if (path != null) {" +
"int index = path.lastIndexOf('/'); " +
"if (index > 0) {" +
"return path.substring(0,index);" +
"}" +
"}" +
"return ''",Collections.emptyMap())
我还尝试遍历这些值并将它们添加到数组中,但随后聚合计数变得混乱且不准确,这违背了使用聚合的整个目的。
Field1.value final terms: [A01]
Field2.value final terms: [A01]
= gives a value count of 2 for 'A01' but only returns 'A01'
返回:
new Script(ScriptType.INLINE,"List returnList = new ArrayList(); " +
"for (int i = 0; i < doc['field.analyzer'].length; i++) {" +
"def path = doc['field.analyzer'][i]; " +
"if (path != null) { " +
"int index = path.lastIndexOf('/'); " +
"if (index > 0) { " +
"returnList.add(path.substring(0,index)); " +
"} else { " +
"returnList.add('');} " +
"} else { " +
"returnList.add('');}} " +
"return returnList ",Collections.emptyMap()));
总有没有做嵌套的分析器索引或嵌套的聚合而不更改数据的结构吗?还是可以使用无痛方式来返回正确的聚合术语和值计数,而无需执行额外的Java代码操作?
非常感谢您的帮助。
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)