Skip to content

Commit 55821db

Browse files
Merge pull request #14 from rahul1193/rahul/rest-client-1.4.1
Rahul/rest client 1.4.1
2 parents 38174b5 + 628595d commit 55821db

File tree

4 files changed

+181
-11
lines changed

4 files changed

+181
-11
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<modelVersion>4.0.0</modelVersion>
77
<groupId>org.elasticsearch</groupId>
88
<artifactId>elasticsearch</artifactId>
9-
<version>1.4.1-rest-1.0.37</version>
9+
<version>1.4.1-rest-1.0.41</version>
1010
<packaging>jar</packaging>
1111
<description>Elasticsearch - Open Source, Distributed, RESTful Search Engine</description>
1212
<inceptionYear>2009</inceptionYear>

src/main/java/org/elasticsearch/action/bulk/BulkRequest.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.apache.http.HttpEntity;
2525
import org.apache.http.nio.entity.NStringEntity;
2626
import org.elasticsearch.ElasticsearchIllegalArgumentException;
27+
import org.elasticsearch.Version;
2728
import org.elasticsearch.action.*;
2829
import org.elasticsearch.action.delete.DeleteRequest;
2930
import org.elasticsearch.action.index.IndexRequest;
@@ -538,6 +539,16 @@ public RestRequest.Method getMethod() {
538539
return RestRequest.Method.POST;
539540
}
540541

542+
@Override
543+
public ActionRestRequest getActionRestRequest(Version version) {
544+
ActionRestRequest actionRestRequest = super.getActionRestRequest(version);
545+
if (version.id >= Version.V_5_0_0_ID) {
546+
return new BulkRequestV5();
547+
} else {
548+
return actionRestRequest;
549+
}
550+
}
551+
541552
@Override
542553
public HttpEntity getEntity() throws IOException {
543554
//todo add support for streaming version of getRestEntity()
@@ -549,4 +560,39 @@ public HttpEntity getEntity() throws IOException {
549560
return new NStringEntity(builder.toString(), "UTF-8");
550561
}
551562

563+
private class BulkRequestV5 implements ActionRestRequest {
564+
565+
@Override
566+
public RestRequest.Method getMethod() {
567+
return BulkRequest.this.getMethod();
568+
}
569+
570+
@Override
571+
public String getEndPoint() {
572+
return BulkRequest.this.getEndPoint();
573+
}
574+
575+
@Override
576+
public HttpEntity getEntity() throws IOException {
577+
//todo add support for streaming version of getRestEntity()
578+
StringBuilder builder = new StringBuilder();
579+
for (ActionRequest request : requests) {
580+
ActionRestRequest restRequest = request.getActionRestRequest(Version.V_5_0_0);
581+
String payload = HttpUtils.readUtf8(restRequest.getBulkEntity());
582+
builder.append(payload);
583+
}
584+
return new NStringEntity(builder.toString(), "UTF-8");
585+
}
586+
587+
@Override
588+
public Map<String, String> getParams() {
589+
return BulkRequest.this.getParams();
590+
}
591+
592+
@Override
593+
public HttpEntity getBulkEntity() throws IOException {
594+
return BulkRequest.this.getBulkEntity();
595+
}
596+
}
597+
552598
}

src/main/java/org/elasticsearch/action/update/UpdateRequest.java

Lines changed: 89 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@
2525
import org.apache.http.nio.entity.NStringEntity;
2626
import org.elasticsearch.Version;
2727
import org.elasticsearch.action.ActionRequestValidationException;
28+
import org.elasticsearch.action.ActionRestRequest;
2829
import org.elasticsearch.action.DocumentRequest;
2930
import org.elasticsearch.action.WriteConsistencyLevel;
3031
import org.elasticsearch.action.index.IndexRequest;
32+
import org.elasticsearch.action.search.SearchRequest;
3133
import org.elasticsearch.action.support.replication.ReplicationType;
3234
import org.elasticsearch.action.support.single.instance.InstanceShardOperationRequest;
3335
import org.elasticsearch.common.Nullable;
@@ -41,12 +43,14 @@
4143
import org.elasticsearch.common.util.UriBuilder;
4244
import org.elasticsearch.common.xcontent.*;
4345
import org.elasticsearch.index.VersionType;
46+
import org.elasticsearch.index.query.ScriptFilterParser;
4447
import org.elasticsearch.rest.RestRequest;
4548
import org.elasticsearch.script.ScriptService;
4649

4750
import java.io.IOException;
4851
import java.nio.charset.StandardCharsets;
4952
import java.util.HashMap;
53+
import java.util.LinkedHashMap;
5054
import java.util.Locale;
5155
import java.util.Map;
5256

@@ -206,7 +210,9 @@ public String script() {
206210
return this.script;
207211
}
208212

209-
public ScriptService.ScriptType scriptType() { return this.scriptType; }
213+
public ScriptService.ScriptType scriptType() {
214+
return this.scriptType;
215+
}
210216

211217
public Map<String, Object> scriptParams() {
212218
return this.scriptParams;
@@ -573,6 +579,7 @@ public UpdateRequest source(byte[] source, int offset, int length) throws Except
573579

574580
/**
575581
* Should this update attempt to detect if it is a noop?
582+
*
576583
* @return this for chaining
577584
*/
578585
public UpdateRequest detectNoop(boolean detectNoop) {
@@ -632,15 +639,15 @@ public boolean docAsUpsert() {
632639
public void docAsUpsert(boolean shouldUpsertDoc) {
633640
this.docAsUpsert = shouldUpsertDoc;
634641
}
635-
636-
public boolean scriptedUpsert(){
642+
643+
public boolean scriptedUpsert() {
637644
return this.scriptedUpsert;
638645
}
639-
646+
640647
public void scriptedUpsert(boolean scriptedUpsert) {
641648
this.scriptedUpsert = scriptedUpsert;
642649
}
643-
650+
644651

645652
@Override
646653
public void readFrom(StreamInput in) throws IOException {
@@ -651,7 +658,7 @@ public void readFrom(StreamInput in) throws IOException {
651658
id = in.readString();
652659
routing = in.readOptionalString();
653660
script = in.readOptionalString();
654-
if(Strings.hasLength(script)) {
661+
if (Strings.hasLength(script)) {
655662
if (in.getVersion().onOrAfter(Version.V_1_3_0)) {
656663
scriptType = ScriptService.ScriptType.readFrom(in);
657664
} else {
@@ -745,6 +752,16 @@ public String getEndPoint() {
745752
return UriBuilder.newBuilder().slash(index(), type(), id(), "_update").build();
746753
}
747754

755+
@Override
756+
public ActionRestRequest getActionRestRequest(Version version) {
757+
ActionRestRequest actionRestRequest = super.getActionRestRequest(version);
758+
if (version.id >= Version.V_5_0_0_ID) {
759+
return new UpdateRequestV5();
760+
} else {
761+
return actionRestRequest;
762+
}
763+
}
764+
748765
@Override
749766
public RestRequest.Method getMethod() {
750767
return RestRequest.Method.POST;
@@ -783,8 +800,7 @@ private Map<String, Object> getPayload() {
783800
if (this.detectNoop) {
784801
payload.put("detect_noop", Boolean.TRUE);
785802
}
786-
}
787-
else if (Strings.hasLength(script)) {
803+
} else if (Strings.hasLength(script)) {
788804
payload.putIfNotNull("lang", this.scriptLang);
789805
payload.putIf("scripted_upsert", Boolean.TRUE, this.scriptedUpsert);
790806
payload.put("script", this.script);
@@ -799,4 +815,69 @@ else if (Strings.hasLength(script)) {
799815
}
800816
return payload.map();
801817
}
818+
819+
private class UpdateRequestV5 implements ActionRestRequest {
820+
821+
public RestRequest.Method getMethod() {
822+
return UpdateRequest.this.getMethod();
823+
}
824+
825+
public String getEndPoint() {
826+
return UpdateRequest.this.getEndPoint();
827+
}
828+
829+
@Override
830+
public Map<String, String> getParams() {
831+
return UpdateRequest.this.getParams();
832+
}
833+
834+
@Override
835+
public HttpEntity getEntity() throws IOException {
836+
Map<String, Object> payload = getPayload();
837+
String json = XContentHelper.convertToJson(payload, false);
838+
return new NStringEntity(json, StandardCharsets.UTF_8);
839+
840+
}
841+
842+
private Map<String, Object> getPayload() {
843+
MapBuilder<String, Object> payload = MapBuilder.newMapBuilder();
844+
if (UpdateRequest.this.doc != null) {
845+
payload.put("doc", UpdateRequest.this.doc.sourceAsMap());
846+
if (UpdateRequest.this.docAsUpsert) {
847+
payload.put("doc_as_upsert", Boolean.TRUE);
848+
}
849+
if (UpdateRequest.this.detectNoop) {
850+
payload.put("detect_noop", Boolean.TRUE);
851+
}
852+
} else if (Strings.hasLength(script)) {
853+
Map<String, Object> scriptObj = new LinkedHashMap<>();
854+
scriptObj.put(UpdateRequest.this.scriptType.name().toLowerCase(Locale.ROOT), script);
855+
scriptObj.put("lang", scriptLang);
856+
scriptObj.put("params", scriptParams);
857+
payload.put("script", scriptObj);
858+
}
859+
if (UpdateRequest.this.upsertRequest != null) {
860+
payload.put("upsert", UpdateRequest.this.upsertRequest.sourceAsMap());
861+
}
862+
863+
if (payload.isEmpty()) {
864+
throw new IllegalStateException("Nothing to update. No doc, script or upsert provided");
865+
}
866+
return payload.map();
867+
}
868+
869+
public HttpEntity getBulkEntity() throws IOException {
870+
Map<String, Object> payload = Maps.newLinkedHashMap();
871+
Map<String, Object> actionMetadata = Maps.newLinkedHashMap();
872+
actionMetadata.put("_index", index);
873+
actionMetadata.put("_type", type);
874+
actionMetadata.put("_id", id);
875+
payload.put(BULK_TYPE, actionMetadata);
876+
String json = XContentHelper.convertToJson(payload, false);
877+
878+
String payloadJson = XContentHelper.convertToJson(getPayload(), false);
879+
String fullPayload = Strings.join(json, "\n", payloadJson, "\n");
880+
return new NStringEntity(fullPayload, StandardCharsets.UTF_8);
881+
}
882+
}
802883
}

src/main/java/org/elasticsearch/index/query/BoolFilterBuilder.java

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,15 @@
1919

2020
package org.elasticsearch.index.query;
2121

22+
import org.apache.commons.codec.digest.DigestUtils;
23+
import org.apache.commons.lang3.BooleanUtils;
24+
import org.elasticsearch.Version;
25+
import org.elasticsearch.common.xcontent.ToXContentUtils;
2226
import org.elasticsearch.common.xcontent.XContentBuilder;
27+
import org.elasticsearch.common.xcontent.XContentFactory;
28+
import org.elasticsearch.common.xcontent.XContentType;
2329

30+
import java.io.ByteArrayInputStream;
2431
import java.io.IOException;
2532
import java.util.ArrayList;
2633
import java.util.List;
@@ -130,15 +137,19 @@ public BoolFilterBuilder cacheKey(String cacheKey) {
130137
@Override
131138
protected void doXContent(XContentBuilder builder, Params params) throws IOException {
132139
builder.startObject("bool");
140+
doXContentInternal(builder, params);
141+
addCacheToQuery(cacheKey, cache, builder, params);
142+
builder.endObject();
143+
}
144+
145+
private void doXContentInternal(XContentBuilder builder, Params params) throws IOException {
133146
doXArrayContent("must", mustClauses, builder, params);
134147
doXArrayContent("must_not", mustNotClauses, builder, params);
135148
doXArrayContent("should", shouldClauses, builder, params);
136149

137150
if (filterName != null) {
138151
builder.field("_name", filterName);
139152
}
140-
addCacheToQuery(cacheKey, cache, builder, params);
141-
builder.endObject();
142153
}
143154

144155
private void doXArrayContent(String field, List<FilterBuilder> clauses, XContentBuilder builder, Params params) throws IOException {
@@ -156,4 +167,36 @@ private void doXArrayContent(String field, List<FilterBuilder> clauses, XContent
156167
builder.endArray();
157168
}
158169
}
170+
171+
private String generateCacheKey() throws IOException {
172+
XContentBuilder builder = XContentFactory.contentBuilder(XContentType.SMILE);
173+
builder.startObject("bool");
174+
doXContentInternal(builder, EMPTY_PARAMS);
175+
builder.endObject();
176+
return DigestUtils.sha512Hex(builder.bytes().streamInput());
177+
}
178+
179+
@Override
180+
protected void addCacheToQuery(String cacheKey, Boolean cache, XContentBuilder builder, Params params) throws IOException {
181+
if (ToXContentUtils.getVersionFromParams(params).onOrAfter(Version.V_5_0_0)) {
182+
if (BooleanUtils.isTrue(cache)) {
183+
if (cacheKey != null) {
184+
builder.field("_cache_key", cacheKey);
185+
builder.field("_cache_any", cacheKey);
186+
} else {
187+
builder.field("_cache_any", generateCacheKey());
188+
}
189+
}
190+
191+
builder.field("_cache_sha", generateCacheKey());
192+
return;
193+
}
194+
195+
if (cache != null) {
196+
builder.field("_cache", cache);
197+
}
198+
if (cacheKey != null) {
199+
builder.field("_cache_key", cacheKey);
200+
}
201+
}
159202
}

0 commit comments

Comments
 (0)