除了动态映射 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
          }
        }
      }
    }
  }
}

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部