使用python从弹性搜索中获取数据表可视化

时间:2018-03-27 12:00:12

标签: python elasticsearch kibana

如何通过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分组以获得计数。抱歉,我不知道如何在不泄露用户凭据的情况下创建可重现的示例。

1 个答案:

答案 0 :(得分:1)

  • 第一:我不想下载完整的文件(每个文件都在 实际数据包含150多个变量。)

如果您只想处理文档中的少数字段,则应在查询前使用_source filter - doc here。例如,要从您的文档中仅检索v1v2字段:

body={
    "_source": ["v1", "v2"],"query": {"match": {'v1':'US'}}}
  • 第二:虽然我正在努力,但我还不熟悉json。

你只是尝试这样的事情:

for result in mydocs['hits']['hits']:
    print result["_source"]['v1']
    print result["_source"]['v2']