2017-05-18 3 views
1

、Pythonリクエストを使用してElasticSearchをクエリしようとすると、結果を取得できません。ここに私のコードです:PythonリクエストでElasticSearchを照会する

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 

私は常に次のような出力を得る:

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

をしかし、私は、次のcurlコマンドを使用しようとすると、私は右の結果を得ます。上記のコードjson_dataでは、abc.jsonファイルからjsonを読み取ります。上記のコードに何か誤りがありますか?ここで

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

は私updateJson()メソッドです:

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

コマンドラインで渡すクエリは何ですか? [elasticsearch-py](https://elasticsearch-py.readthedocs.io/en/master/)を使用していない理由は何ですか? – kichik

+0

ファイル "abc.json"の名前をjsonを読み込む場所から渡します。 – akashag26

+0

'abc.json'には何がありますか? 'updateJson()'は何をしますか? – kichik

答えて

0

私は(スラッシュを除く)あなたはPythonのバージョンでスター*をエスケープする必要はありませんだと思う:

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

しかし、また、 requestsの代わりにpython client libraryを使用することをおすすめします。

+0

しかし、私のelasticsearchのインデックスには「*」文字が含まれています。 'https:// localhost:9200/logstash-kafka-wga-blueid- \\ */_ search' – akashag26

+0

@ akashag26私は '*'を削除することを意味しません。 '*'の前にスラッシュが必要ないことを意味します( '..blueid - \ *'の代わりに '... blueid- *'を使います)。シェルの星からエスケープするためにはスラッシュが必要ですが、urlをpython変数に入れるときは必要ありません。 –

関連する問題