Elasticsearch: Fix parsing of raw fields result for version 5 Elasticsearch 5 returns the results in a "_source" element rather than a "fields" element as in Elasticsearch 2. Add a new method in the adapter and use it in the abstract index. Bug: Issue 6094 Change-Id: Icc8d6f73f86d8abac798efec178f96c0dbf2ae6f
diff --git a/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java b/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java index 1533d86..b3a22bc 100644 --- a/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java +++ b/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
@@ -190,7 +190,8 @@ protected FieldBundle toFieldBundle(JsonObject doc) { Map<String, FieldDef<V, ?>> allFields = getSchema().getFields(); ListMultimap<String, Object> rawFields = ArrayListMultimap.create(); - for (Map.Entry<String, JsonElement> element : doc.get("fields").getAsJsonObject().entrySet()) { + for (Map.Entry<String, JsonElement> element : + doc.get(client.adapter().rawFieldsKey()).getAsJsonObject().entrySet()) { checkArgument( allFields.containsKey(element.getKey()), "Unrecognized field " + element.getKey()); FieldType<?> type = allFields.get(element.getKey()).getType();
diff --git a/java/com/google/gerrit/elasticsearch/ElasticQueryAdapter.java b/java/com/google/gerrit/elasticsearch/ElasticQueryAdapter.java index 72af49a..b6cbf2f 100644 --- a/java/com/google/gerrit/elasticsearch/ElasticQueryAdapter.java +++ b/java/com/google/gerrit/elasticsearch/ElasticQueryAdapter.java
@@ -23,6 +23,7 @@ private final String exactFieldType; private final String stringFieldType; private final String indexProperty; + private final String rawFieldsKey; ElasticQueryAdapter(ElasticVersion version) { this.ignoreUnmapped = version == ElasticVersion.V2_4; @@ -34,6 +35,7 @@ this.exactFieldType = "keyword"; this.stringFieldType = "text"; this.indexProperty = "true"; + this.rawFieldsKey = "_source"; break; case V2_4: default: @@ -42,6 +44,7 @@ this.exactFieldType = "string"; this.stringFieldType = "string"; this.indexProperty = "not_analyzed"; + this.rawFieldsKey = "fields"; break; } } @@ -71,4 +74,8 @@ String indexProperty() { return indexProperty; } + + String rawFieldsKey() { + return rawFieldsKey; + } }