ElasticSearch——文档映射

1 动态映射

  在关系数据库中,需要事先创建数据库,然后在该数据库下创建数据表,并创建表字段、类型、长度、主键等,最后才能基于表插入数据。而Elasticsearch中不需要定义Mapping映射(即关系型数据库的表、字段等),在文档写入Elasticsearch时,会根据文档字段自动识别类型,这种机制称之为动态映射。
  动态映射规则如下:
1.1 删除原创建的索引
DELETE /es_db

1.2 创建索引

PUT /es_db

1.3 创建文档(ES根据数据类型, 会自动创建映射)

PUT /es_db/_doc/1
{
    "name": "Jack",
    "sex": 1,
    "age": 25,
    "book": "java入门至精通",
    "address": "广州小蛮腰"
}

1.4 获取文档映射

GET /es_db/_mapping    

2 静态映射

  静态映射是在Elasticsearch中也可以事先定义好映射,包含文档的各字段类型、分词器等,这种方式称之为静态映射。
2.1 删除原创建的索引
DELETE /es_db

2.2 创建索引

PUT /es_db

2.3 设置文档映射

PUT /es_db
{
    "mappings":{
        "properties":{
            "name":{"type":"keyword","index":true,"store":true},
            "sex":{"type":"integer","index":true,"store":true},
            "age":{"type":"integer","index":true,"store":true},
            "book":{"type":"text","index":true,"store":true},
            "address":{"type":"text","index":true,"store":true}
           }
       }
}    

2.4 根据静态映射创建文档

PUT /es_db/_doc/1
{
    "name": "Jack",
    "sex": 1,
    "age": 25,
    "book": "elasticSearch入门至精通",
    "address": "广州车陂"
}

2.5 获取文档映射

GET /es_db/_mapping    

  注意:es文档核心数据类型如下。

   字符串:string,string类型包含 text 和 keyword。
  text:该类型被用来索引长文本,在创建索引前会将这些文本进行分词,转化为词的组合,建立索引;允许es来检索这些词,text类型不能用来排序和聚合。
  keyword:该类型不能分词,可以被用来检索过滤、排序和聚合,keyword类型不可用text进行分词模糊检索。
  数值型:long、integer、short、byte、double、float
  日期型:date
  布尔型:boolean

2.6 keyword 与 text 映射类型的区别

  将 book 字段设置为 keyword 映射 (只能精准查询, 不能分词查询,能聚合、排序)。
  将 book 字段设置为 text 映射能模糊查询, 能分词查询,不能聚合、排序)。
POST /es_db/_doc/_search
{
    "query": {
        "term": {
            "book": "elasticSearch入门至精通"
        }
    }
}

2.7 创建静态映射时指定text类型的ik分词器

2.7.1 设置ik分词器的文档映射
  先删除之前的es_db再创建新的es_db定义ik_smart的映射。
PUT /es_db
{
  "mappings":{
    "properties":{
      "name":{"type":"keyword","index":true,"store":true},
      "sex":{"type":"integer","index":true,"store":true},
      "age":{"type":"integer","index":true,"store":true},
      "book":{"type":"text","index":true,"store":true,"analyzer":"ik_smart","search_analyzer":"ik_smart"},
      "address":{"type":"text","index":true,"store":true}
    }
  }
}

2.7.2 分词查询

POST /es_db/_doc/_search
{ 
    "query": {
        "match": {"address": "广"}
    }
}    

POST /es_db/_doc/_search
{ 
    "query": {
        "match": {"address": "广州"}
    }
}    

2.8 对已存在的mapping映射进行修改

  具体方法
    1)如果要推倒现有的映射, 你得重新建立一个静态索引
    2)然后把之前索引里的数据导入到新的索引里
    3)删除原创建的索引
    4)为新索引起个别名, 为原索引名
POST _reindex
{
    "source": {
        "index": "db_index"
    },
    "dest": {
        "index": "db_index_2"
    }
}

DELETE /db_index

PUT /db_index_2/_alias/db_index        

 

posted @ 2022-07-14 14:54  檀潇兵  阅读(352)  评论(0编辑  收藏  举报