Update 'exact' field mapping to avoid duplicate data
As an example, the mapping for the exact field 'status' in 'changes'
index is updated as below to avoid duplication.
Without change:
"status": {
"type": "keyword",
"fields": {
"key": {
"type": "keyword"
}
}
}
With change:
"status": {
"type": "keyword"
}
On a Gerrit instance with ~4M changes, this change brings down the
size of changes index from ~25G to ~20G.
Release-Notes: Size of indices is reduced. Re-index is required.
Change-Id: I680eb01c7e8c96548ddb4b321f383916f165af28
diff --git a/src/main/java/com/google/gerrit/elasticsearch/ElasticMapping.java b/src/main/java/com/google/gerrit/elasticsearch/ElasticMapping.java
index 48cb10a..daf2cf9 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/ElasticMapping.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/ElasticMapping.java
@@ -76,12 +76,7 @@
}
Builder addExactField(String name) {
- FieldProperties key = new FieldProperties(adapter.exactFieldType());
- key.index = adapter.indexProperty();
- FieldProperties properties;
- properties = new FieldProperties(adapter.exactFieldType());
- properties.fields = ImmutableMap.of("key", key);
- fields.put(name, properties);
+ fields.put(name, new FieldProperties(adapter.exactFieldType()));
return this;
}
diff --git a/src/main/java/com/google/gerrit/elasticsearch/ElasticQueryBuilder.java b/src/main/java/com/google/gerrit/elasticsearch/ElasticQueryBuilder.java
index df28dcc..b0dd2ad 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/ElasticQueryBuilder.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/ElasticQueryBuilder.java
@@ -152,9 +152,9 @@
if (value.endsWith("$") && !value.endsWith("\\$") && !value.endsWith("\\\\$")) {
value = value.substring(0, value.length() - 1);
}
- return QueryBuilders.regexpQuery(name + ".key", value);
+ return QueryBuilders.regexpQuery(name, value);
} else {
- return QueryBuilders.termQuery(name + ".key", value);
+ return QueryBuilders.termQuery(name, value);
}
}
}