在elasticsearch中,在映射创建过程中完全定义映射有多重要?

时间:2013-01-15 15:25:19

标签: elasticsearch

我正在创建这样的映射

"institution" : {
  "properties" : {        
    "InstitutionCode" : {
      "type" : "string",
      "store" : "yes"
    },
    "InstitutionID" : {
      "type" : "integer",
      "store" : "yes"
    },
    "Name" : {
      "type" : "string",
      "store" : "yes"
    }
  }
}

但是,当我为机构执行实际的索引操作时,我会添加一个Alias属性(每个机构有0个或更多别名)

"institution" : {
  "properties" : {   
    "Aliases" : {
      "dynamic" : "true",
      "properties" : {
        "InstitutionAlias" : {
          "type" : "string"
        },
        "InstitutionAliasTypeID" : {
          "type" : "long"
        }
      }
    },     
    "InstitutionCode" : {
      "type" : "string",
      "store" : "yes"
    },
    "InstitutionID" : {
      "type" : "integer",
      "store" : "yes"
    },
    "Name" : {
      "type" : "string",
      "store" : "yes"
    }
  }
}

这实际上是一个简化的例子,因为我实际上在记录的实际索引中添加了多个字段而不仅仅是别名。

在绘图创建过程中完全定义映射有多重要?

由于机构记录的附加属性索引,我在索引操作期间自动调整映射是否会受到任何处罚?我希望机构随着时间的推移获得额外的属性,我想知道除了机构索引代码之外我是否还需要维护映射创建代码。

1 个答案:

答案 0 :(得分:3)

我认为动态映射的开销几乎可以忽略不计......使用它们不会影响索引速度。但是,您可能会遇到一些意外情况,其中ElasticSearch会错误地自动检测字段类型。

一个常见的例子是检测整数,因为字段的第一个例子是数字(“25”),而实际上该字段的其余数据是一个字符串。或者当其余数据实际上是浮点数时看到一个整数。等等。

如果您的数据标准化得很好,那就不是问题了。

或者,您可以使用dynamic templates根据正则表达式模式将映射应用于新字段。