Python Elasticsearchモジュールの使用
6860 ワード
参考URL:https://es.xiaoleilu.com/054_Query_DSL/70_Important_clauses.html http://www.cnblogs.com/letong/p/4749234.html
背景
最近ある種類のログが毎日数十万を発見して、しかし数百条の紛失があって、原因を探すため、まずデータの対比を得なければならなくて、そこで、ESの中のデータを導いてライブラリの中で原始のデータと対比して、下の小さいプログラムがあって、主に関心を持ついくつかの点は(Elasticsearchモジュールを採用します):ページめくりの問題は、ES自体がクエリーを制限するのは1 w行しかないため、デフォルト値を変更し、一方的に向上すれば、ES自体の性能に大きな影響を及ぼす可能性があります. クエリー構文問題(文章の冒頭の2つの共有urlを参照) ここでライブラリに挿入したり、何かを修正したりすると、いっそファイルに入れるだけで、コードは以下の通りです.
背景
最近ある種類のログが毎日数十万を発見して、しかし数百条の紛失があって、原因を探すため、まずデータの対比を得なければならなくて、そこで、ESの中のデータを導いてライブラリの中で原始のデータと対比して、下の小さいプログラムがあって、主に関心を持ついくつかの点は(Elasticsearchモジュールを採用します):
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# auther : xiaojinsong([email protected])
from elasticsearch import Elasticsearch
import logging
import sys
class Myesapi():
def __init__(self, index={}, body={}, doc_type='doc'):
self.clus_es = ['xxxxxx:9200', 'xxxxxx:9200', 'xxxxxx:9200']
self.body = body
self.doc_type = doc_type
self.index = index
def search(self, scroll='2m'):
es = Elasticsearch(self.clus_es)
if self.index:
try:
resp = es.search(index=self.index, doc_type=self.doc_type, body=self.body, scroll=scroll,
size=500)
# scroll_id = resp['_scroll_id']
resp_docs = resp["hits"]["hits"]
total = resp["hits"]["total"]
count = len(resp_docs)
result = resp_docs
while len(resp_docs) > 0:
scroll_id = resp['_scroll_id']
resp = es.scroll(scroll_id=scroll_id, scroll=scroll)
resp_docs = resp["hits"]["hits"]
result.extend(resp_docs)
count += len(resp_docs)
if count >= total:
break
return result
except Exception as msg:
logging.info(msg)
else:
msg = 'you must ensure the correct index'
sys.exit(1) and logging.info(msg)
def delete_index(self):
# es = Elasticsearch(self.clus_es)
pass
def useage():
pass
def main():
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename='/tmp/esapi.log',
)
body1 = {
"query": {
"bool": {
"must": [
{"match_phrase": {"timedate": "2018-08-20"}},
{"match_phrase": {"source": "/app/logs/app/app.2018-08-20"}}
],
"filter": [
{"term": {"appname": "app"}},
{"term": {"host": "xxxxxxxx"}}
],
}
},
"_source" : ["timedate",]
}
body = {
"query": {
"match_all": {}
}
}
index = 'logstash-xxxxx-2018.08.20'
esapi = Myesapi(body=body1, index=index)
result = esapi.search()
for i in result:
try:
with open('timelist.txt', 'a+') as f:
f.writelines(i["_source"]["timedate"]+'
')
except Exception as e:
logging.info(e)
if __name__ == '__main__':
main()