为了方便演示和切换 ES 地址,在
~/.bashrc
中添加如下变量和脚本:ES=localhost:9200 escurl () { curl -H 'Content-Type: application/json' "$@"; } 复制代码
Elasticsearch 具有非常强大的动态性和灵活性,例如当向一个不存在的索引添加文档时,会自动创建该索引,例如:
$ escurl -XPUT $ES/my_article/doc/1?pretty -d '
{
"title": "标题",
"createdAt": "2020-02-02T02:02:02.020Z",
"wordCount": 100,
"extra": {
"deleted": false,
"score": 8.5
}
}'
复制代码
如果 my_article 索引不存在,则会自动创建 my_article 索引,并向其中添加数据,其数据结构为:
{
"mappings": {
"doc": {
"properties": {
"createdAt": { "type": "date" },
"wordCount": { "type": "long" },
"extra": {
"properties": {
"score": { "type": "float" },
"deleted": { "type": "boolean" }
}
},
"title": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
}
}
}
}
}
复制代码
可以发现 ES 自动做了如下字段类型映射
- title 字段映射成 text 类型
- createdAt 字段映射成 date 类型
- wordCount 字段映射成 long 类型
- extra.score 字段映射成 float 类型
- extra.deleted 字段映射成 boolean 类型
猜测非常准确,而且后续增加新字段还可以动态猜测并更新 mapping。