我试图通过弹性搜索获得超过10,000个观察并将其转储到pandas数据框中: -
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)
我收到以下格式的数据
我想把它转换成如下的熊猫数据框: - qazxsw poi
我可以建议你一个更好的方法来做到这一点..我猜你试图获得超过10,000条记录..尝试以下方式,你将获得数百万条记录:: -
首先安装
1.)定义您的客户
from elasticsearch_dsl import Search
2)client = Elasticsearch(['http://localhost:9200'])
3.)检查总命中数
search = Search(using=client)
4)results = search.execute()
results.hits.total
5.)写下你的查询
s = Search(using=client)
6.)使用扫描将数据转储到数据框中...扫描会将所有数据转储到您的数据框中,即使它数十亿也要小心。
s = s.query(..write your query here...)
7.)看看你的数据框和微笑:)
results_df = pd.DataFrame((d.to_dict() for d in s.scan()))
将所有数据存储在变量中,然后使用pd.DataFrame(YourVariable)将该变量转换为数据框。