我是ElasticSearch的新手,我目前正在尝试编写一个涉及聚合的ElasticSearch查询,它将为我获取涉及某些字段的前5个桶(查询中涉及的字段数量是动态的,它可以在2个字段和5个字段之间的任何位置)。
我面临的问题是,团队当前的ElasticSearch版本不支持多术语,因此我恢复了复合聚合,将top_hits作为子聚合器,这样我就可以获得前5个桶。然而,我没有根据doc_count/命中以排序顺序获得结果。
请求:
{
"query":{
"bool":{
"must":[{
"exists":{"field":"uuid"}
},{
"query_string":{
"query":"*","lowercase_expanded_terms":false
}
}]
}
},
"aggs":{
"test_aggregation":{
"composite":{
"sources":[{
"zipCode":{"terms":{"field":"zipCode"}},
"routeCode":{"terms":{"field":"routeCode"}}
}]
}
},
"aggs":{
"test_aggregation_hits":{
"top_hits":{
"size":5,
"_source":{
"includes":["uuid"]
}
}
}
}
},
"size":"0"
}
回应:
{
"took": 310,
"timed_out": false,
"num_reduce_phases": 2,
"_shards": {
"total": 140,
"successful": 140,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 8400,
"max_score": 0.0,
"hits": []
},
"aggregations": {
"test_aggregation": {
"after_key": {
"zipCode": "someRandomZipCode",
"routeCode": "someRandomRouteCode"
},
"buckets": [{
"key": {
"zipCode": "someRandomValue-1",
"routeCode": "someRandomRouteCode-1"
},
"doc_count": 36,
"test_aggregation_hits": {
"hits": {
"total": 36,
"max_score": 11.5650015,
"hits": [{
.... // some data
}]
}
}
}, {
"key": {
"zipCode": "someRandomValue-2",
"routeCode": "someRandomRouteCode-2"
},
"doc_count": 40,
"test_aggregation_hits": {
"hits": {
"total": 40,
"max_score": 11.5658015,
"hits": [{
.... // some data
}]
}
}
}, {
"key": {
"zipCode": "someRandomValue-3",
"routeCode": "someRandomRouteCode-3"
},
"doc_count": 13,
"test_aggregation_hits": {
"hits": {
"total": 13,
"max_score": 11.5750015,
"hits": [{
.... // some data
}]
}
}
}
....
....
]
}
}
}
能够通过使用存储桶排序弹性搜索聚合来解决此问题。
最终查询看起来像这样。
{
"query":{
"bool":{
"must":[{
"exists":{"field":"uuid"}
},{
"query_string":{
"query":"*","lowercase_expanded_terms":false
}
}]
}
},
"aggs":{
"test_aggregation":{
"composite":{
"sources":[{
"zipCode":{"terms":{"field":"zipCode"}},
"routeCode":{"terms":{"field":"routeCode"}}
}],
"size":"100"
}
},
"aggs":{
"test_aggregation_hits":{
"top_hits":{
"size":"25",
"_source":{
"includes":["uuid"]
}
}
},
"sort_buckets": {
"size":"10",
"sort": [
{"_count": { "order": "desc" } }
]
}
}
},
"size":"0"
}
我编写了一些aggs查询来获取总计(sum)和唯一计数。但结果有点混乱。 唯一值大于doc_count。 可能吗? 我知道基数aggs是实验性的,可以得到不同值的近似计数 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggr
我正在使用ElasticSearch 6.3,我正在处理一个包含多个子聚合的聚合,其中我需要根据较低级别reverse_nested聚合的doc_count来排序顶级聚合桶。 我的索引是这样创建的: 这些是我索引的示例文档: 我需要我的聚合能够提取包含每个子项id/名称对的文档数。(考虑子项ID始终对应于相同的子项名称)。即: 这是原始聚合查询: 聚合似乎返回了我需要的所有数据: 但是,存储桶是根
我正在使用Elasticsearch bucket聚合。我有一组文档,每个文档都有一个类别字段,它是一个数组。我需要获得每个类别的数量以及搜索结果。但目前,我得到了错误的doc\u计数。 这是我的聚合查询 } 下面是我得到的错误doc\u计数的结果。
问题内容: 我目前有使用PIVOT生成如下表的查询: 我想做的是,但看起来像是拉伸,结果是值递减。 这是查询: 这样做会产生错误,因此可以指定列吗? 问题答案: 试试这个:
现在使用了Pypy首创的“紧凑”表示形式。与Python3.5相比,新的dict()的内存使用量减少了20%到25%。PEP 468(保留函数中**kwargs的顺序。)是通过这个来实现的。这个新实现的保序方面被认为是一个实现细节,不应该被依赖(这在将来可能会改变,但是在更改语言规范以强制所有当前和将来的Python实现的保序语义之前,希望在几个版本中使用这个新的dict实现;这也有助于保持与仍然
问题内容: 我有一个与数据库对话的servlet,然后返回一个有序(按时间排序)对象的列表。在servlet部分,我有 从日志中,我可以看到数据库以正确的顺序返回了User对象。 在前端,我有 但是顺序改变了。 我只在返回的列表很大(超过130个用户)时才注意到这一点。 我尝试使用Firebug进行调试,Firebug中的“响应选项卡”显示列表的顺序与servlet中的日志不同。 我做错了什么吗?