瀏覽代碼

Avoid copying the field alias lookup structure unnecessarily. (#39726)

The field alias map is now only copied if a new alias is added, or if an alias
definition has changed. This follows the same behavior as we have for concrete
field mappings and avoids unnecessary object creation.
Julie Tibshirani 6 年之前
父節點
當前提交
8e5ba9a1e4
共有 1 個文件被更改,包括 6 次插入2 次删除
  1. 6 2
      server/src/main/java/org/elasticsearch/index/mapper/FieldTypeLookup.java

+ 6 - 2
server/src/main/java/org/elasticsearch/index/mapper/FieldTypeLookup.java

@@ -68,7 +68,7 @@ class FieldTypeLookup implements Iterable<MappedFieldType> {
             MappedFieldType fieldType = fieldMapper.fieldType();
             MappedFieldType fullNameFieldType = fullName.get(fieldType.name());
 
-            if (!Objects.equals(fieldType, fullNameFieldType)) {
+            if (Objects.equals(fieldType, fullNameFieldType) == false) {
                 fullName = fullName.copyAndPut(fieldType.name(), fieldType);
             }
         }
@@ -76,7 +76,11 @@ class FieldTypeLookup implements Iterable<MappedFieldType> {
         for (FieldAliasMapper fieldAliasMapper : fieldAliasMappers) {
             String aliasName = fieldAliasMapper.name();
             String path = fieldAliasMapper.path();
-            aliases = aliases.copyAndPut(aliasName, path);
+
+            String existingPath = aliases.get(aliasName);
+            if (Objects.equals(path, existingPath) == false) {
+                aliases = aliases.copyAndPut(aliasName, path);
+            }
         }
 
         return new FieldTypeLookup(fullName, aliases);