1

ElasticSearch 2.3.3 を使用しています。ここで、インデックス内のドキュメント内の多くの配列の 1 つを更新する必要があります。これはElasticSearchのドキュメントの一部です:

      "sizes": [
         {
            "characteristicId": 11154209,
            "localized": [
               {
                  "country": "kz",
                  "price": 19580,
                  "priceWithSale": 15460,
                  "quantity": 6
               },
               {
                  "country": "ru",
                  "price": 3660,
                  "priceWithSale": 2891,
                  "quantity": 6
               }
            ],
            "typeId": 0,
            "sizeName": "35",
            "wbSize": {
               "id": 19,
               "value": "35"
            },
            "techSize": {
               "id": 58,
               "value": "35"
            }
         }
      ]

次のように、Java-APIで「ドキュメントをマージして更新」機能を使用しようとしました:

updateRequest = new UpdateRequest();
            updateRequest.index("index)";
            updateRequest.type("type");
            updateRequest.id("2148069");

                    updateRequest.doc(XContentFactory.jsonBuilder()
                        .startObject()
                            .startArray("sizes")
                                .startObject()
                                    .field("characteristicId", 9099140)
                                    .startArray("localized")
                                        .startObject()
                                            .field("country", "kz")
                                            .field("price", 15)
                                            .field("priceWithSale", 15)
                                        .endObject()
                                        .startObject()
                                            .field("country", "ru")
                                            .field("price", 3)
                                            .field("priceWithSale", 3)
                                        .endObject()
                                    .endArray()
                                .endObject()
                            .endArray()
                        .endObject());

            client.update(updateRequest).get();

しかし、配列内のいくつかのフィールドを更新する必要がある間、配列全体を書き換えるだけです。何か方法はありますか?

4

0 に答える 0