es核心技术与实战 Day05(Mapping)

Mapping

  • Mapping类似数据库中的schema的定义,作用如下
    • 定义索引中的字段的名称
    • 定义字段的数据类型,例如字符串,数字,布尔…
    • 字段,倒排索引的相关配置,(Analyzed or Not Analyzed,Analyzer)
  • Mapping 会把JSON文档映射成Lucene所需要的扁平格式
  • 一个Mapping属于一个索引的Type
    • 每个文档都属于一个Type,
    • 一个Type有一个Mapping定义
    • 7.0开始,不需要在Mapping定义中指定type信息
      字段的数据类型
  • 简单类型
    • Text / Keyword
    • Date
    • Integer / Floating
    • BooleanI
    • IPv4 & IPv6
  • 复杂类型 -对象和嵌套对象
    • 对象类型 /嵌套类型
  • 特殊类型
    • geo_ point & geo_ shape / percolator

类型的自动识别
es核心技术与实战 Day05(Mapping)_第1张图片

demo

//写入文档
PUT mapping_test/_doc/1
{
	"firstName" : "Chan",
	"lastName": "Jackie",
	"loginDate":"2018-07-24T10: 29:48.103Z"
}

//查看Mapping文件
GET mapping_test/_mapping

//删除索引
DELETE mapping_test

//重新插入文档
PUT mapping_test/_doc/1
{
	"uid" : "123" ,
	"isVip" : false,
	"isAdmin": "true",
	"age" :19 ,
	"heigh" :180
}
‘true’ false’ ‘strict’
文档可索引 YES YES NO
字段可索引 YES . NO NO
Mapping被更新 YES NO NO

定义mapping

PUT movies
{
	"mappings": {
		"doc":{
			"dynamic" :"false"
		}
	}
}

  • 当dynamic被设置成false时候,存在新增字段的数据写入,该数据可以被索引,但是新增字段被丢弃
  • 当设置成Strict模式时候,数据写入直接出错

如何定义一个Mapping

PUT movies
{
	"mappings": {
		//define your mappings here
	}
}

Index -控制当前字段是否被索引。默认为true。如果设置成false, 该字段不可被搜索

PUT users
{
	"mappings" : {
		"properties" : {
			"firstName" : {
				"type" : "text"
			}"lastName" : {
				"type" : "text"
				//对NULL值实现搜索
				"null_value":"NULL"
			},
			"mobile" : {
				"type" : "text" ,
				//该字段不可被搜索
				"index": false
				}
			}
		}
}

char_filter

//自动去除html标签
POST_ analyze
{
	"tokenizer": "keyword",
	"char_ filter" : ["html. strip"],
	"text": "hello world"
}
//替换符号
POST _analyze
{
	"tokenizer":"standard", 
	"char_ filter": [
		{
			"type" : "mapping" ,
			//-替换成_
			"mappings" : [ "- => _"]
		}
	],
"	text": "123-456, I-test! test-990 650-555- 1234"
}



你可能感兴趣的:(elasticsearch)