Elasticsearch的Mapping使用分析(es7官方文档解读)

目录

  • mapping是什么
  • 动态mapping
    • 默认动态mapping
    • 设计自己的mapping检测模板
  • 运行时字段
  • dynamic


参考ES 7版本官方文档
官方7.17文档

挑了一些我觉得重要的点总结
如有谬误,欢迎指正


mapping是什么

在ES里创建一个索引

PUT demo_index
{
   
	"mappings": {
   
		"dynamic": false
		"properties": {
   
			"demo_id": {
   
				"type": "text"
			}
		}
	}
}

上面的properties里定义了字段demo_id,它的类型是text。dynamic选择了false说明mapping不需要动态规则来匹配,这种情况下进行搜索时和普通的关系型数据库搜索非常类似。

mapping类似于数据库中的表结构定义,定义以下这些内容

  • 定义字段名称
  • 定义字段数据类型
  • 字段、倒排索引的相关配置

但是和比如mysql这样的数据相比还是有很多不同之处,搜索的字段类型可以提前定义好,也可以不定义让ES来推测,也可在搜索的时候动态加入新字段。

GET /demo_index/_mapping

查看mapping

动态mapping

如果你想使用动态mapping就将上面提到的dynamic字段设置为true或者runtime

默认动态mapping

ES允许直接插入文档,不需要提前定义类型、字段 ,当你查询的时候会自动推测匹配显示出来。

curl -X PUT "localhost:9200/data/_doc/1?pretty" -H 'Content-Type: application/json' -d'
{ "count": 5 }

使用kibana的话直接PUT data/_doc/1 … 就行

自动检测类型和添加字段就是动态mapping,ES有默认的检测规则,我们自己也可以定义自己的规则。

设计自己的mapping检测模板

这一块比较复杂

match_mapping_type
这个可以理解为根据字段默认检测出来的类型进行匹配

用的官方文档的案例:
可以看到当默认检测出来的字段类型为integer时,将替换为long类型;如果检测出来的类型为text或者keyword类型,将会替换为string类型。

PUT demo_index
{
   
  "mappings": {
   
    "dynamic_templates": [
      {
   
        "integers": {
   
          "match_mapping_type": "long",
          "mapping": {
   
            "type": 

你可能感兴趣的:(数据库+中间件,elasticsearch,大数据,后端)