Checking update results

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 elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/5f9c7a26-fba0-44d4-8f8c-401ac5c4e5e2%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

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 aviveyal07@gmail.com 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 elasticsearch+unsubscribe@googlegroups.com.
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 elasticsearch+unsubscribe@googlegroups.com.
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.

Jörg - thanks for the thoughtful reply. Rephrasing my question a bit: how
can the code be sure that an update request was at least submitted to ES
without an error? Surely, an update request may fail due to various runtime
issues.

On Wednesday, October 1, 2014 12:21:15 PM UTC+3, Aviv Eyal 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 elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/bcec4757-542a-4a28-b94c-71fb23d129b3%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

HTTP status codes are used to communicate errors, for example a runtime
error would return HTTP status 500

--

Itamar Syn-Hershko
http://code972.com | @synhershko https://twitter.com/synhershko
Freelance Developer & Consultant
Author of RavenDB in Action http://manning.com/synhershko/

On Wed, Oct 1, 2014 at 2:59 PM, Aviv Eyal aviveyal07@gmail.com wrote:

Jörg - thanks for the thoughtful reply. Rephrasing my question a bit: how
can the code be sure that an update request was at least submitted to ES
without an error? Surely, an update request may fail due to various runtime
issues.

On Wednesday, October 1, 2014 12:21:15 PM UTC+3, Aviv Eyal 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 elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit
https://groups.google.com/d/msgid/elasticsearch/bcec4757-542a-4a28-b94c-71fb23d129b3%40googlegroups.com
https://groups.google.com/d/msgid/elasticsearch/bcec4757-542a-4a28-b94c-71fb23d129b3%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 elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/CAHTr4ZtM%2BSwV%3DquiPH8ochWZoO5nyyg-4FOexcToA%3D46aRrv8w%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Itamar, I'm using the Java driver and was hoping that UpdateResponse will
have some kind of status but looks like it doesn't.

On Wednesday, October 1, 2014 3:01:02 PM UTC+3, Itamar Syn-Hershko wrote:

HTTP status codes are used to communicate errors, for example a runtime
error would return HTTP status 500

--

Itamar Syn-Hershko
http://code972.com | @synhershko https://twitter.com/synhershko
Freelance Developer & Consultant
Author of RavenDB in Action http://manning.com/synhershko/

On Wed, Oct 1, 2014 at 2:59 PM, Aviv Eyal <avive...@gmail.com
<javascript:>> wrote:

Jörg - thanks for the thoughtful reply. Rephrasing my question a bit: how
can the code be sure that an update request was at least submitted to ES
without an error? Surely, an update request may fail due to various runtime
issues.

On Wednesday, October 1, 2014 12:21:15 PM UTC+3, Aviv Eyal 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 elasticsearc...@googlegroups.com <javascript:>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/elasticsearch/bcec4757-542a-4a28-b94c-71fb23d129b3%40googlegroups.com
https://groups.google.com/d/msgid/elasticsearch/bcec4757-542a-4a28-b94c-71fb23d129b3%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 elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/666ecbbd-8119-42e8-b04e-98b69d0d437c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

If you get an UpdateResponse from actionGet(), you can be sure ES has
executed the action. Otherwise you will get an exception.

Jörg

On Wed, Oct 1, 2014 at 1:59 PM, Aviv Eyal aviveyal07@gmail.com wrote:

Jörg - thanks for the thoughtful reply. Rephrasing my question a bit: how
can the code be sure that an update request was at least submitted to ES
without an error? Surely, an update request may fail due to various runtime
issues.

On Wednesday, October 1, 2014 12:21:15 PM UTC+3, Aviv Eyal 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 elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit
https://groups.google.com/d/msgid/elasticsearch/bcec4757-542a-4a28-b94c-71fb23d129b3%40googlegroups.com
https://groups.google.com/d/msgid/elasticsearch/bcec4757-542a-4a28-b94c-71fb23d129b3%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 elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/CAKdsXoGTiS3yKNGv6VU3uOas9h6pOR8SwH%2BfrVOkkMVNFnsP2Q%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.