簡體   English   中英

使用elasticsearch-dsl-py進行范圍聚合

[英]Range aggregation using elasticsearch-dsl-py

POST /_search
{
"size": 0,
"aggs": {
    "by_grp" : {
        "terms": {
            "field": "grpId",
            "size": 0
        },
        "aggs": {
            "twitter_count": {
                "range": {
                    "field": "twitter.followers",
                    "ranges": [
                        { "to" : 501},
                        { "from" : 501, "to" : 1001},
                        { "from" : 1001, "to" : 5001},
                        { "from" : 5001}
                    ]
                },
                "aggs" : {
                    "email_addy": {
                        "terms" : {
                            "field": "email.value",
                            "size": 0
                        }
                    }
                }
            }
        }
    }
}
}

使用elastic-search-dsl,我的python代碼是

from datetime import datetime
from elasticsearch_dsl import DocType, String, Date, Integer, Search, Q
from elasticsearch_dsl.connections import connections
from elasticsearch import Elasticsearch

client = connections.create_connection(hosts=['http://somehost:9200'])
s = Search(using=client, index="dexy", doc_type="grp")

s.aggs.bucket('by_grp', 'terms', field='grpId', size=0) \
.bucket('twitter_count', 'range', field='twitter.followers')

我在哪里可以通過表格來定義范圍,例如CURL代碼? 目前,GIT和文檔很少涉及此主題。 找不到示例。

這看起來很奇怪,因為它似乎沒有完全遵循縮進/行連續規則,但這是可行的。

s.aggs.bucket('by_grp', 'terms', field='grpId', size=0) \
.bucket('twitter_count', 'range', field='twitter.followers',
    ranges=[
        {'to': 5001},
        {'from': 5001, 'to': 10001},
        {'from': 10001, 'to': 50001},
        {'from': 50001}
    ]
) \
.bucket('email_addy', 'terms', field='email.value', size=0)

請注意,size = 0,僅表示查詢應返回該項目的所有結果,而不是默認值10。因此,它將為所有grpId提供結果,而不僅僅是10,並且包括所有落入范圍桶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM