如何使用elasticsearch dsl在elasticsearch中基于字段值和索引过滤器进行计数

vhmi4jdf  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(0)|浏览(224)

我用的是python3.6 elasticsearch (7.9.1) 以及 elasticsearch-dsl (7.3.0) .
在我的 logstash-2020.09.21 索引我有如下一些文档(按相关字段筛选):

{
    "subtype": "webfilter",
    "url": "https://play.google.com/",
    ...
}

我可以做一个 curl 发布请求并获取我需要的信息,如下所示:

curl -X POST "localhost:9200/logstash-2020.09.21/_search?size=0&pretty" -H 'Content-Type: application/json' -d'{
  "aggs": {
    "urls": {
      "filter": { "term": { "subtype": "webfilter" } },
      "aggs": {
        "count": { "terms": { "field": "url", "size": 100 } }
      }
    }
  }
}'

这会产生一些桶,比如:

"buckets" : [
    {
        "key" : "https://play.google.com/",
        "doc_count" : 30783
    }
]

我想知道如何在使用 elasticsearch-dsl 但我很难弄清楚怎么做。
这就是我迄今为止尝试过但没有成功的方法:

from elasticsearch import Elasticsearch
from elasticsearch_dsl import Q, A, Search

a = A("filter", Q("term", subtype="webfilter"))

client = Elasticsearch()

s = Search(using=client, index="logstash-2020.09.21")

s.aggs.bucket("urls", a).bucket("count", "terms", field="url", size=100)

s.execute()

输出:

{
    "subtype": "local",
    "url": "/",
    ...
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题