質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Elasticsearch

Elasticsearchは、クラウド向けに構築された、RESTful な API を提供する分散型のサーチエンジンアプリケーションです。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1197閲覧

ElasticSearchの検索クエリをjson.dumpsで作成したい

zenji0705

総合スコア69

Elasticsearch

Elasticsearchは、クラウド向けに構築された、RESTful な API を提供する分散型のサーチエンジンアプリケーションです。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/06/02 05:46

編集2020/06/02 05:46

閲覧ありがとうございます。

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

jsonファイルにプレースホルダーを用意してjson.dumpsで文字列にしたあとに、replaceしてとりあえず解決しました

投稿2020/06/04 04:11

zenji0705

総合スコア69

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問