Es 字段类型推断 如何关闭?
时间: 2023-08-05 07:25:27 浏览: 198
如果您不想使用Elasticsearch的字段类型推断,可以通过在索引映射(mapping)中将`dynamic`属性设置为`strict`来关闭它。这样,Elasticsearch将不再自动推断字段类型,而是仅接受显示声明的字段类型。例如,在创建索引时,您可以使用以下命令关闭动态类型映射:
```
PUT /my_index
{
"mappings": {
"properties": {
"my_field": {
"type": "text",
"dynamic": "strict"
}
}
}
}
```
在上面的示例中,将`dynamic`属性设置为`strict`,以确保字段类型不会自动推断,而只接受显式声明的类型。如果您想要在索引时关闭所有字段的类型推断,可以在索引映射(mapping)中将`dynamic`属性设置为`false`。
相关问题
ES关闭字段类型推断后,如果有未定义字段,文档是否可以插入
如果在Elasticsearch中关闭了字段类型推断,那么如果文档中包含未在索引映射(mapping)中定义的字段,则插入文档会失败,并返回以下错误信息:
```
"strict_dynamic_mapping_exception"
```
这是因为将`dynamic`属性设置为`strict`或`false`时,Elasticsearch不会自动创建新字段或推断新字段的数据类型。如果您想要在文档中插入新的字段,并且关闭了字段类型推断,您需要先在索引映射(mapping)中定义该字段,然后才能插入文档。如果您想要在不预定义字段的情况下灵活地插入文档,您可以将`dynamic`属性设置为`true`,这样Elasticsearch将自动推断新字段的类型。
es中插入数据时如何指定字段的数据类型
在 Elasticsearch 中插入数据时,可以使用 JSON 格式的文档来指定每个字段的数据类型。
例如,如果要插入一个名为 "person" 的索引,其中包含一个 "age" 字段,可以使用以下命令:
```
POST /person/_doc
{
"age": 30
}
```
在这个示例中,Elasticsearch 将自动推断 "age" 字段的数据类型为整数(因为值为 30)。如果需要明确指定数据类型,可以使用 "mapping" 来定义索引的字段映射关系,例如:
```
PUT /person
{
"mappings": {
"_doc": {
"properties": {
"age": {
"type": "integer"
}
}
}
}
}
```
在这个示例中,我们定义了一个名为 "person" 的索引,并指定了 "age" 字段的数据类型为整数。然后,我们可以插入数据,指定 "age" 字段的整数值:
```
POST /person/_doc
{
"age": 30
}
```
请注意,如果尝试向一个已经存在的字段中插入不同类型的数据,Elasticsearch 可能会抛出错误。因此,建议在创建索引时明确指定每个字段的数据类型,以确保数据的一致性和准确性。
阅读全文