2017-07-20 15 views
0

現在、pythonとelasticsearchモジュールを使用してIPアドレスのリストを読み込んで使用するクエリを作成するスクリプトを作成しています。ElasticsearchとPython Boolのクエリーとリストの使用

以下は、私がやろうとしていますかを説明すべきいくつかのコードです:私はこれを実行したら

from elasticsearch import Elasticsearch 
es = Elasticsearch(["serveraddress"]) 


with open(ipfile.txt', 'r') as f: 
    ipList = [line.strip('\n') for line in f] 

query = {"query":{"bool":{"should":[{"term":{"source":ipList}},{"term":{"destination":ipList}}]}}} 

results = es.search(index=index, body=query) 

しかし、私は次のエラーを取得:クエリをテストした後

<type 'str'>: (<type 'exceptions.TypeError'>, TypeError('string indices must be integers',)) 

を、問題は複数の用語と文字列の中でリストを使用することであるようです。

誰にもこの回避策がありますか?このスクリプトは、IPアドレスでいっぱいになるファイルを読み込むことを想定しています。

ありがとうございます!

答えて

0

私はこれを理解しました。これを行う簡単な方法があるかもしれませんが、以下は私のために働いたものです。

with open(ipfile, 'r') as f: 
      ipList = [line.strip('\n') for line in f] 
shouldQuery = [] 
[shouldQuery.append({'term':{'source':'{}'.format(ip)}}) for ip in ipList] 
[shouldQuery.append({'term':{'destination':'{}'.format(ip)}}) for ip in ipList] 
query = {'query':{'bool':{'should':[shouldQuery]}}} 

これは、同様の問題を抱えている人に役立ちます。誰かがこれをやるより簡単な方法を持っている場合は、コミュニティに知らせてください:)

関連する問題