FieldType: Remove unnecessary KEYWORD type

Elasticsearch 5 split string type in two: keyword (also known as exact
in gerrit index type system) and text (also known as full text in gerrit
index type system).  During migration from Elasticsearch 2 to 5 exact
type was erroneously split in exact and keyword types, that are the same.

This reverts commit 506125e71a786f31573e6ba1b1983a4c48cc1dbc.
This reverts commit 09fdc3eaadd352b628acfc95c5b74df305b9dbf9.

Change-Id: I788e4d06d490687508c4bfd1703037a268fe31a5
diff --git a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticMapping.java b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticMapping.java
index 599a168..e9f3cb3 100644
--- a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticMapping.java
+++ b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticMapping.java
@@ -28,8 +28,6 @@
       FieldType<?> fieldType = field.getType();
       if (fieldType == FieldType.EXACT) {
         mapping.addExactField(name);
-      } else if (fieldType == FieldType.KEYWORD) {
-        mapping.addKeywordField(name);
       } else if (fieldType == FieldType.TIMESTAMP) {
         mapping.addTimestamp(name);
       } else if (fieldType == FieldType.INTEGER
@@ -63,20 +61,10 @@
     }
 
     Builder addExactField(String name) {
-      FieldProperties key = new FieldProperties(adapter.keywordFieldType());
+      FieldProperties key = new FieldProperties(adapter.exactFieldType());
       key.index = adapter.indexProperty();
       FieldProperties properties;
-      properties = new FieldProperties(adapter.stringFieldType());
-      properties.fields = ImmutableMap.of("key", key);
-      fields.put(name, properties);
-      return this;
-    }
-
-    Builder addKeywordField(String name) {
-      FieldProperties key = new FieldProperties(adapter.keywordFieldType());
-      key.index = adapter.indexProperty();
-      FieldProperties properties;
-      properties = new FieldProperties(adapter.keywordFieldType());
+      properties = new FieldProperties(adapter.exactFieldType());
       properties.fields = ImmutableMap.of("key", key);
       fields.put(name, properties);
       return this;
diff --git a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticQueryAdapter.java b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticQueryAdapter.java
index 2ed75df..72af49a 100644
--- a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticQueryAdapter.java
+++ b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticQueryAdapter.java
@@ -20,7 +20,7 @@
   private final boolean ignoreUnmapped;
   private final String searchFilteringName;
   private final String indicesExistParam;
-  private final String keywordFieldType;
+  private final String exactFieldType;
   private final String stringFieldType;
   private final String indexProperty;
 
@@ -31,7 +31,7 @@
       case V6_2:
         this.searchFilteringName = "_source";
         this.indicesExistParam = "?allow_no_indices=false";
-        this.keywordFieldType = "keyword";
+        this.exactFieldType = "keyword";
         this.stringFieldType = "text";
         this.indexProperty = "true";
         break;
@@ -39,7 +39,7 @@
       default:
         this.searchFilteringName = "fields";
         this.indicesExistParam = "";
-        this.keywordFieldType = "string";
+        this.exactFieldType = "string";
         this.stringFieldType = "string";
         this.indexProperty = "not_analyzed";
         break;
@@ -60,8 +60,8 @@
     return indicesExistParam;
   }
 
-  String keywordFieldType() {
-    return keywordFieldType;
+  String exactFieldType() {
+    return exactFieldType;
   }
 
   String stringFieldType() {
diff --git a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticQueryBuilder.java b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticQueryBuilder.java
index 13e29e4..5281ebe 100644
--- a/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticQueryBuilder.java
+++ b/gerrit-elasticsearch/src/main/java/com/google/gerrit/elasticsearch/ElasticQueryBuilder.java
@@ -94,7 +94,7 @@
       return intRangeQuery(p);
     } else if (type == FieldType.TIMESTAMP) {
       return timestampQuery(p);
-    } else if (type == FieldType.EXACT || type == FieldType.KEYWORD) {
+    } else if (type == FieldType.EXACT) {
       return exactQuery(p);
     } else if (type == FieldType.PREFIX) {
       return QueryBuilders.matchPhrasePrefixQuery(name, value);
diff --git a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/AbstractLuceneIndex.java b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/AbstractLuceneIndex.java
index 607fc90..5c3183a 100644
--- a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/AbstractLuceneIndex.java
+++ b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/AbstractLuceneIndex.java
@@ -337,7 +337,7 @@
       for (Object value : values.getValues()) {
         doc.add(new LongField(name, ((Timestamp) value).getTime(), store));
       }
-    } else if (type == FieldType.KEYWORD || type == FieldType.EXACT || type == FieldType.PREFIX) {
+    } else if (type == FieldType.EXACT || type == FieldType.PREFIX) {
       for (Object value : values.getValues()) {
         doc.add(new StringField(name, (String) value, store));
       }
diff --git a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/QueryBuilder.java b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/QueryBuilder.java
index d619a0b..74111a0 100644
--- a/gerrit-lucene/src/main/java/com/google/gerrit/lucene/QueryBuilder.java
+++ b/gerrit-lucene/src/main/java/com/google/gerrit/lucene/QueryBuilder.java
@@ -148,7 +148,7 @@
       return intRangeQuery(p);
     } else if (type == FieldType.TIMESTAMP) {
       return timestampQuery(p);
-    } else if (type == FieldType.EXACT || type == FieldType.KEYWORD) {
+    } else if (type == FieldType.EXACT) {
       return exactQuery(p);
     } else if (type == FieldType.PREFIX) {
       return prefixQuery(p);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/FieldDef.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/FieldDef.java
index 3b408a0..d5f1091 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/index/FieldDef.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/FieldDef.java
@@ -39,10 +39,6 @@
     return new FieldDef.Builder<>(FieldType.EXACT, name);
   }
 
-  public static FieldDef.Builder<String> keyword(String name) {
-    return new FieldDef.Builder<>(FieldType.KEYWORD, name);
-  }
-
   public static FieldDef.Builder<String> fullText(String name) {
     return new FieldDef.Builder<>(FieldType.FULL_TEXT, name);
   }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/FieldType.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/FieldType.java
index 04c0b44..820b62a 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/index/FieldType.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/FieldType.java
@@ -33,9 +33,6 @@
   /** A string field searched using exact-match semantics. */
   public static final FieldType<String> EXACT = new FieldType<>("EXACT");
 
-  /** A Keyword field searched using non-analyzed-match semantics. */
-  public static final FieldType<String> KEYWORD = new FieldType<>("KEYWORD");
-
   /** A string field searched using prefix. */
   public static final FieldType<String> PREFIX = new FieldType<>("PREFIX");
 
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/index/group/GroupField.java b/gerrit-server/src/main/java/com/google/gerrit/server/index/group/GroupField.java
index 581b037..5e72327 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/index/group/GroupField.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/index/group/GroupField.java
@@ -17,7 +17,6 @@
 import static com.google.gerrit.server.index.FieldDef.exact;
 import static com.google.gerrit.server.index.FieldDef.fullText;
 import static com.google.gerrit.server.index.FieldDef.integer;
-import static com.google.gerrit.server.index.FieldDef.keyword;
 import static com.google.gerrit.server.index.FieldDef.prefix;
 
 import com.google.gerrit.reviewdb.client.AccountGroup;
@@ -32,11 +31,11 @@
 
   /** Group UUID. */
   public static final FieldDef<AccountGroup, String> UUID =
-      keyword("uuid").stored().build(g -> g.getGroupUUID().get());
+      exact("uuid").stored().build(g -> g.getGroupUUID().get());
 
   /** Group owner UUID. */
   public static final FieldDef<AccountGroup, String> OWNER_UUID =
-      keyword("owner_uuid").build(g -> g.getOwnerGroupUUID().get());
+      exact("owner_uuid").build(g -> g.getOwnerGroupUUID().get());
 
   /** Group name. */
   public static final FieldDef<AccountGroup, String> NAME =