如何通过python在弹性搜索中过滤和汇总数据。我通过Kibana界面手动创建了一个数据表可视化,并以.csv格式下载。现在我想用python做同样的事情。
例如,如果索引中有10个变量:v1,v2,v3,.. v10
那么如何获取可以在sql中描述的数据表:
select v2, count(v2)
from index
where v1 = "some value"
group by v2
直到现在我能够做到这一点:
from elasticsearch5 import Elasticsearch
user = 'xxx'
password = 'xxx'
url = 'xxx'
command = "%s:%s@%s:9200" % (user,password,url)
x = Elasticsearch(command)
# Get the count of documents
num = x.count(index='my_index')['count']
# Get documents filtered by v1
my_docs = x.search(index="my_index", body={"query": {"match": {'v1':'US'}}})
现在我想要的是从my_docs中仅选择变量v2
,并按v2
分组以获得计数。抱歉,我不知道如何在不泄露用户凭据的情况下创建可重现的示例。
答案 0 :(得分:1)
如果您只想处理文档中的少数字段,则应在查询前使用_source filter
- doc here。例如,要从您的文档中仅检索v1
和v2
字段:
body={
"_source": ["v1", "v2"],"query": {"match": {'v1':'US'}}}
你只是尝试这样的事情:
for result in mydocs['hits']['hits']:
print result["_source"]['v1']
print result["_source"]['v2']