Elasticsearch Mapping

Mapping 是类似于数据库中的表结构定义,主要作用如下

  • 定义 index 下的字段名
  • 定义字段类型,比如数值型、浮点型、布尔型等
  • 定义倒排索引相关的设置,比如是否索引、记录 position 等

mapping 中的字段类型一旦设置,禁止直接修改,因为 Lucene实现的倒排索引生成后不允许修改,应该重新建立新索引,然后做 reindex 操作

但是可以新增字段,通过 dynamic 参数来控制字段的新增,这个参数的值如下:

  • true:默认值,表示允许选自动新增字段
  • false:不允许自动新增字段,但是文档可以正常写入,但无法对字段进行查询等操作
  • strict:严格模式,文档不能写入,报错

创建名为 my_index的索引并设置mapping:

PUT lizhe_users_index
{
  "mappings": {
    "dynamic": false,
    "properties": {
      "name": {
        "type": "text"
      },
      "sex": {
        "type": "keyword"
      },
      "age": {
        "type": "integer"
      },
      "address": {
        "type": "text"
      }
    }
  }
}

GET /lizhe_users_index/_mapping

插入一个doc

PUT /lizhe_users_index/_doc/1
{
  "name": "xiaoming",
  "sex": "male",
  "age": 7,
  "address": "中国辽宁省不知道市向阳路小学"
}

不指定索引的时候,需要用POST的

GET /_search
{
  "query": {
    "match": {
      "name": "xiaoming"
    }
  }
}
{
  "took" : 380,
  "timed_out" : false,
  "_shards" : {
    "total" : 8,
    "successful" : 8,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "lizhe_users_index",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.2876821,
        "_source" : {
          "name" : "xiaoming",
          "sex" : "male",
          "age" : 7,
          "address" : "中国辽宁省不知道市向阳路小学"
        }
      }
    ]
  }
}
Send a Message