閲覧ありがとうございます。
ElasticSearchの検索クエリを動的に生成しようとしています。
テンプレートのjsonファイルをjson.loadで読み込んで、検索したいクエリの条件を加筆したあとにjson.dumpsで文字列に変換しようとしています。
シンプルにtermで1つの条件を指定して検索することはできたのですが、複数項目を指定すると正しく検索ができず0件出力になってしまいます。
複数の項目を検索する際にクエリに["AAA","BBB"]と書いているのですが、記号が全部エスケープされているようです。
エスケープされないようにする、または複数項目を指定する場合のクエリの書き方を教えていただけないでしょうか。
query.json
1{ 2"query": { 3 "bool": { 4 "must": [ 5 { 6 "term": { 7 "custId": "" 8 } 9 }] 10 } 11}, 12"sort": [ 13 { "custId": "asc" } 14 ] 15}
python
1 # cust情報をリスト 2 es_cus_list = [] 3 for custId in chk_custIds: 4 #es_cus_list.append("'" + custId['key'] + "'") 5 es_cus_list.append('"' + custId['key'] + '"') 6 #es_cus_list.append(custId['key']) 7 8 # 検索クエリの生成 9 with open('/workspace/anomaly/query/cust_info.json') as f: 10 query_json = json.load(f) 11 12 print(','.join(es_cut_list)) 13 ### ["000001","000002"]のような条件にしたいです ### 14 query_json['query']['bool']['must'][0]['term']['custId'] = '[' + ','.join(es_cus_list) + ']' 15 16 query_body = json.dumps(query_json).encode('utf-8') 17 ## json.dumpsで "[\"000001\",\"000002\"]" になる 18 19 hits_result = es_search(query_body,search_index) 20 21 print(hits_result) 22
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。