2017-05-18 2 views
1

, ich bin nicht ganz in der Lage, die Ergebnisse abzurufen, wenn ich versuche, ElasticSearch mit Python-Anfragen abzufragen. Hier ist mein Code:Abfragen von ElasticSearch mit Python-Anfragen

json_data = updateJson(sys.argv[1]) 

headers={'Accept': 'application/json', 'Content-type': 'application/json'} 

elastic_url ='https://localhost:9200/logstash-kafka-wga-blueid-\*/_search' 

query = json.dumps(json_data) 

response = requests.get(elastic_url, data = query, auth=('xxx','xxx'), verify=False, headers = headers) 

print response.text 

Ich bekomme immer die folgende Ausgabe:

{"took":1,"timed_out":false,"_shards":{"total":0,"successful":0,"failed":0},"hits":{"total":0,"max_score":0.0,"hits":[]}} 

Aber wenn ich versuche, den folgenden ROTATION-Befehl zu verwenden, erhalte ich die richtigen Ergebnisse. Im obigen Code liest json_data den JSON aus der abc.json-Datei. Ist im obigen Code etwas falsch?

curl -X GET -k -u xxx:xxx https://localhost:9200/logstash-kafka-wga-blueid-\*/_search -d @temporaryRundeckReport.json 

Hier ist meine updateJson() Methode:

def updateJson(fileName): 
with open(fileName, 'r') as file: 
    json_data = file.read() 
    json_data = json_data.replace('%X-FORWARDED-HOST%', sys.argv[2]); 
    json_data = json_data.replace('%TIME%', sys.argv[3]); 
    json_data = json_data.replace('%INTERVAL%', sys.argv[4]); 

with open('temporaryRundeckReport.json', 'w+') as file: 
    os.chmod('temporaryRundeckReport.json',0o777) 
    file.write(json_data) 
    return json_data 
+0

Was ist die Abfrage, die Sie in der Befehlszeile übergeben? Irgendeinen Grund, warum Sie [elasticsearch-py] nicht verwenden (https://elasticsearch-py.readthedocs.io/en/master/)? – kichik

+0

Ich übergebe den Namen der Datei "abc.json" von wo es den JSON liest. – akashag26

+0

Und was ist in 'abc.json'? Was macht 'updateJson()'? – kichik

Antwort

0

Ich glaube, Sie brauchen nicht zu Stern zu entkommen * in Python-Version (entfernen Schrägstrich): auch

elastic_url = 'https://localhost:9200/logstash-kafka-wga-blueid-*/_search' 

Aber , Würde ich empfehlen, die python client library anstelle von requests zu verwenden.

+0

Aber mein Index in elasticsearch enthält "*" Zeichen. Ich habe herausgefunden, dass ich es wie folgt definieren kann: 'https: // localhost: 9200/logstash-kafka-wga-blauseid- \\ */_ search' – akashag26

+0

@ akashag26 Ich meine nicht, das '*' - I zu entfernen bedeutet, dass Sie den Schrägstrich vor '*' nicht benötigen (verwenden Sie "... bueid- *' anstelle von '..bluid - \ *'). Der Schrägstrich wird benötigt, um dem Stern in der Shell zu entkommen, aber er wird nicht benötigt, wenn Sie die URL in die Python-Variable setzen. –

Verwandte Themen