我正试图从弹性搜索中获得10,000多个观察结果并将其转储到熊猫数据框中:-
es_index = "logstash-2018.08.26"
documento = "your_doc_type"
body = {"from": 0, "size": 100,
"query": {
"constant_score" : {
"filter" : {
"bool" : {
"must" : [{
"range": {"@timestamp" : {
"gte": "2018-08-26T14:00:08.000Z",
"lte": "2018-08-26T16:00:00.000Z"
}}
}],
"filter": [
{"term" :{"type" :"vx_apache_json"}},
{"term" :{"api" :"viv_signin.php"}},
{"term" :{"domain":"fnwp"}}
]
}}}}}
res = helpers.scan(
client = es,
scroll = '2s',
query = body,
index = es_index)
当我试图获得res的价值时,我就得到
<generator object scan at 0x10c89a938>
当我使用以下代码时。.
for i in res:
print(i)
我正在获取以下格式的数据
答案 0 :(得分:0)
将所有数据存储在变量中,然后使用pd.DataFrame(YourVariable)将该变量转换为数据帧。
答案 1 :(得分:0)
我可以建议您一种更好的方法。.我猜您正在尝试获取10,000条以上的记录。.尝试以下方法,您还将获得数百万条记录::-
首次安装
from elasticsearch_dsl import Search
1。)定义您的客户
client = Elasticsearch(['http://localhost:9200'])
2。)search = Search(using=client)
3。)检查总点击数
results = search.execute()
results.hits.total
4。)s = Search(using=client)
5。)写下您的查询
s = s.query(..write your query here...)
6。)使用scan将数据转储到数据框中... Scan会将所有数据转储到您的数据框中,即使它以十亿计也是如此。
results_df = pd.DataFrame((d.to_dict() for d in s.scan()))
7。)看一下数据框并微笑:)
results_df