私は現在Elasticsearch V2.3.1を使用しています。 Javaで次のElasticsearchクエリを使用したいと思います。Javaを使用したElasticsearchのクエリによる更新
POST /twitter/_update_by_query
{
"script": {
"inline": "ctx._source.List = [‘Item 1’,’Item 2’]”
},
"query": {
"term": {
"user": "kimchy"
}
}
}
上記のクエリは、「kimchy」という名前の「ユーザー」を検索し、指定された値で「リスト」フィールドを更新します。このクエリは、複数のドキュメントを同時に更新します。 ここでは、Update API for Javaについてはhttps://www.elastic.co/guide/en/elasticsearch/client/java-api/2.3/java-docs-update.htmlを読んでいますが、探しているものが見つかりませんでした。 Update API for Javaは、一度に1つのドキュメントの更新についてのみ話します。複数のドキュメントを更新する方法はありますか?申し訳ありませんが、私は何かが明らかでない場合。あなたの時間をありがとう。
更新:
私はJavaコードの下に試してみました:
Client client = TransportClient.builder().addPlugin(ReindexPlugin.class)
.build().addTransportAddress(new InetSocketTransportAddress(
InetAddress.getByName("127.0.0.1"), 9300));
UpdateByQueryRequestBuilder ubqrb = UpdateByQueryAction.INSTANCE
.newRequestBuilder(client);
Script script = new Script("ctx._source.List = [\"Item 1\",\"Item 2\"]");
//termQuery is not recognised by the program
BulkIndexByScrollResponse r = ubqrb.source("twitter").script(script)
.filter(termQuery("user", "kimchy")).execute().get();
だから私は、上記のようにJavaのプログラムを編集し、termQueryは、Javaで識別されていません。私がここで間違っていることを知ることができますか?ありがとう。
あなたは 'インポート静的org.elasticsearch.index.query.QueryBuilders.termQueryを追加する必要があります;' – Val
こんにちは@Val、それは(しかし、BulkIndexByScrollResponseのフィルタを使用して)この方法で働いた私は "Kimchy"という名前のユーザーを持つ1つのドキュメントを更新することができます。 BulkIndexByScrollResponseでsetQueryを使用して複数のドキュメントを更新することは可能ですか?またはおそらく他の方法ですか? –
もちろん、あらゆる種類のクエリを作成できます。それはほんの一例でした。あなたの質問は何ですか? – Val