除了动态映射Dynamic Mapping
,更重要的是Explicit Mapping
,显式映射更为灵活,我们可以根据自己的需求自定义字段类型以及索引、属性、子域、复杂类型、analyzer
... 等等。当然更简单的方法是两个同时使用,先插入数据动态生成映射属性,然后通过生成的属性调整字段来创建映射。
# 创建一个 index
PUT explicit-index
{
"mappings": {
"dynamic":"runtime", // 动态映射使用 runtime
"properties": {
"username":{"type":"text"}, // text 类型
"age":{"type":"integer"}, // integer 类型
"sex":{
"type":"keyword", // 使用keyword类型
"index":true, // 设置索引
"ignore_above":10 // 如果字段长度超过10将不会被索引
}
}
}
}
插入数据
POST explicit-index/_doc/1
{
"username":"hello world",
"age":10,
"sex":"aaaaaaaaaaaa"
}
当我们sex
字段插入超过10
个字符,我们进行查询
GET explicit-index/_search
{
"query": {
"wildcard": {
"sex": "aaaa"
}
}
}
返回结果
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 0,
"relation": "eq"
},
"max_score": null,
"hits": []
}
}
超过10
个就搜索结果就没有了
elasticsearch
创建mapping
后不能随便修改,只能添加字段,如果修改字段类型需要重建索引迁移数据,更改Mapping
实质上重建索引。下边我们演示下添加Mapping
字段。
PUT explicit-index/_mapping
{
"properties":{
"id":{
"type":"keyword",
"index":false
}
}
}
# 查看指定字段的 mapping
GET explicit-index/_mapping/field/id
# 返回结果
{
"explicit-index": {
"mappings": {
"id": {
"full_name": "id",
"mapping": {
"id": {
"type": "keyword",
"index": false
}
}
}
}
}
}
发表评论 取消回复