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
类型的自动识别
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": "<b>hello world</b>"
}
//替换符号
POST _analyze
{
"tokenizer":"standard",
"char_ filter": [
{
"type" : "mapping" ,
//-替换成_
"mappings" : [ "- => _"]
}
],
" text": "123-456, I-test! test-990 650-555- 1234"
}