以下是我的内容:
我在elasticseach中有一个存储数千个文档的索引。每个文档都包含一个名为“deviceName”的字段。
以下是我想用java api做的事情:
我想让我的索引中存储所有设备及其出现次数(设备在此索引中出现的次数)。
这是我的java代码:
String[] indexVector = new String[1];
indexVector[0] = "myIndex";
String [] values = new String[2];
values[0] = "sum_delta";
values[1] = "count_frames";
String [] totalPercentage = new String[1];
totalPercentage[0] = "devices>per_percentage";
SearchResponse response = (SearchResponse) client.prepareSearch(indexVector)
.setSize(10000)
.addAggregation(AggregationBuilders.terms("devices").field("deviceName")
.size(100)
.subAggregation(AggregationBuilders.sum("sum_delta").field("delta"))
.subAggregation(AggregationBuilders.count("count_frames").field("cnt"))
.subAggregation(PipelineAggregatorBuilders.bucketScript("per_percentage")
.setBucketsPaths(values)
.script(new Script("_value0 / (_value0 + _value1 + 1)"))
)
)
.addAggregation(PipelineAggregatorBuilders.avgBucket("avg_per_all_devices")
.setBucketsPaths(totalPercentage)
)
.execute()
.actionGet();
以下是我的结果:
使用java API我可以获得63个设备和kibana 64设备。然而,对我来说最大的问题是出现。实际上,对于发生率低于30的设备,我对Java api和Kibana有相同的结果。但是,当出现的次数较大时,kibana会返回一个大于java API返回的出现次数。示例:kibana返回1010,同时java api返回880。
我真的不明白为什么会有这么大的差异。
问题:
那么,拜托,您能告诉我我的代码中有什么问题以及我必须做什么吗?
感谢您的关注和帮助。
答案 0 :(得分:0)
这可能是因为setSize参数。 set size参数首先获取10000个文档,然后对它们执行聚合,而我认为您没有在Kibana中设置这样的大小。尝试将获取大小设置为实际文档计数,并查看是否存在歧义。
答案 1 :(得分:0)
我支持有一些var geometry = new THREE.BoxBufferGeometry(height,width,length);
var materials = [
new THREE.MeshLambertMaterial({
map: THREE.ImageUtils.loadTexture('texture1.jpg')
}),
new THREE.MeshLambertMaterial({
map: THREE.ImageUtils.loadTexture('texture2.jpg')
}),
new THREE.MeshLambertMaterial({
map: THREE.ImageUtils.loadTexture('texture3.jpg')
}),
new THREE.MeshLambertMaterial({
map: THREE.ImageUtils.loadTexture('texture4.jpg')
}),
new THREE.MeshLambertMaterial({
map: THREE.ImageUtils.loadTexture('texture5.jpg')
}),
new THREE.MeshLambertMaterial({
map: THREE.ImageUtils.loadTexture('texture6.jpg')
})
];
mesh = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial(materials));
scene.add(mesh);
等于0的文件。你可以打印_value0 + _value1 + 1
,我猜有一个碎片整数,880个文件被关闭到1010个文件的response.toString()
。
您还可以查看elasticseach的日志,它将打印four-fifths
。