【问题标题】:Use python to get data table Visualization from elastic search使用python从elasticsearch中获取数据表可视化
【发布时间】:2018-09-05 19:53:50
【问题描述】:

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

【问题讨论】:

  • 尝试在 my_docs var 上循环,它是一个 json
  • @Lupanoide,虽然这可能有效,但我有两个问题 - 首先:我不想下载完整的文档(实际数据中的每个文档都包含 150 多个变量)。第二:我还不熟悉json,虽然我正在研究它。

标签: python elasticsearch kibana


【解决方案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']

【讨论】:

  • 非常感谢,我一回到办公室内网就会尝试。
  • 我很乐意提供帮助。如果您需要其他信息,请询问:-)
  • 感谢它有效,但我还有更多问题 - 我会通过编辑我的问题来提问
猜你喜欢
  • 2020-06-28
  • 2018-03-07
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 2018-09-22
  • 1970-01-01
  • 2020-11-09
  • 2019-07-30
相关资源
最近更新 更多