我没有得到“Java API for Elasticsearch”和“Kibana”的相同结果

时间:2016-08-31 16:18:46

标签: java elasticsearch kibana

以下是我的内容:

我在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();

我如何搜索Kibana: enter image description here

以下是我的结果:

使用java API我可以获得63个设备和kibana 64设备。然而,对我来说最大的问题是出现。实际上,对于发生率低于30的设备,我对Java api和Kibana有相同的结果。但是,当出现的次数较大时,kibana会返回一个大于java API返回的出现次数。示例:kibana返回1010,同时java api返回880。

我真的不明白为什么会有这么大的差异。

问题:

那么,拜托,您能告诉我我的代码中有什么问题以及我必须做什么吗?

感谢您的关注和帮助。

2 个答案:

答案 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