You must issue a new get request after the write. The reason is that update works like a write but with a previous get (not with a get after the write).
If data is written, the write action is asynchronously executed, the previous doc versions become obsolete, and eventually the action has to be forwarded to other nodes where the shard(s) for this doc live. Only when issuing a new get request, ES can route this read request again to the primary shard node and open a new reader for this doc. Using the "near real-time" (NRT) feature, ES ensures the last version of the doc from the cache ca be taken, even if it is not flushed to the index. Jörg On Wed, Oct 1, 2014 at 11:21 AM, Aviv Eyal <[email protected]> wrote: > Hi, I'm new to elasticsearch so there might be an obvious answer to this > question. > > What's the best way to check the status of an update operation that > changed the value of an existing property? > I'm using a doc to update an existing indexed document using the java > update api: > > UpdateResponse updateResponse = client.prepareUpdate("content", > "contentitem", item.id) > .setDoc(xb).execute().actionGet(); > > updateResponse.isCreated() only returns true if the doc was inserted using > an upsert operation and updateResponse.getGetResult() returns null null. > > I've looked in the ES tests source code and the way the test is performed > there is by issuing a new get request for the updated fields and comparing > the values from ES with the values set in the update: > > // change existing field > updateResponse = client().prepareUpdate(indexOrAlias(), "type1", > "1").setDoc(XContentFactory.jsonBuilder().startObject().field("field", > 3).endObject()).execute().actionGet(); > for (int i = 0; i < 5; i++) { > getResponse = client().prepareGet("test", "type1", > "1").execute().actionGet(); > > assertThat(getResponse.getSourceAsMap().get("field").toString(), > equalTo("3")); > > assertThat(getResponse.getSourceAsMap().get("field2").toString(), > equalTo("2")); > } > > I'm curious if this can be done just by using UpdateResponse and without > using another get. > > Thanks! > > > > -- > You received this message because you are subscribed to the Google Groups > "elasticsearch" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/elasticsearch/5f9c7a26-fba0-44d4-8f8c-401ac5c4e5e2%40googlegroups.com > <https://groups.google.com/d/msgid/elasticsearch/5f9c7a26-fba0-44d4-8f8c-401ac5c4e5e2%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "elasticsearch" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/CAKdsXoGYsXUbwUjn3Pp64Brip64Xhrp6MQGq1eALrTFu-g8aZg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
