如何解决如何使用Elasticsearch-dsl在Elasticsearch中基于字段的值和索引过滤器进行计数
我正在使用带有from multiprocessing.dummy import Pool as ThreadPool
from queue import Queue
def threadworker(tasks):
while True:
# try:
# func,args,kargs = tasks.get(block=False)
# except Empty:
# break
func,kargs = tasks.get()
try:
func(*args,**kargs)
except Exception as e:
print(e)
finally:
tasks.task_done()
def wait_delay(d):
print('sleeping for (%d)sec' % d)
time.sleep(d)
if __name__ == '__main__':
tasks = Queue()
for d in range(1,5):
tasks.put((wait_delay,(d,),{}))
threadpool = ThreadPool(processes=2)
# threadpool.map_async(threadworker,[tasks])
threadpool.map(threadworker,[tasks]) # blocking...
tasks.join()
和elasticsearch (7.9.1)
的python3.6。
在我的elasticsearch-dsl (7.3.0)
索引中,我有一些类似以下的文件(按相关字段过滤):
logstash-2020.09.21
我可以发出{
"subtype": "webfilter","url": "https://play.google.com/",...
}
POST请求,并像这样获得我需要的信息:
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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。