自定义mapping的api
PUT test_index
{
"mappings": { #mappings关键字
"doc": { #type
"properties": { #字段名称和类型的定义
"name":{ #字段名
"type": "keyword" #字段类型
},
"message":{
"type": "text"
},
"age":{
"type": "integer"
}
}}}}
- mapping中字段类型一旦设定后 禁止直接修改。因为lucene实现的倒排索引生成后不允许修改
- 除非重建索引映射,然后做reindex操作。
1,POST _reindex
{
"source": {"index":"旧索引"},
"dest": {"index":"备份索引"}
}
2,删除旧索引
3,新索引建立mapping
4,POST _reindex
{
"source": {"index":"备份索引"},
"dest": {"index":"新索引"}
}
Field datatypes 字段的数据类型
-
- 字符串类型: text(分词),keyword(不分词)一个用于全文检索,一个用于聚合和排序。
- 数值型: long,integer,short,byte,double,float,half_float,scaled_float
- 日期:date
- 布尔:boolean
- 二进制:binary
- 范围类型:integer_range,float_range,long_range,double_range,date_range
-
- 数组 array
- 对象 object
PUT test_index
{
"mappings": {
"doc": {
"properties": {
"obj":{ #obect类型字段
"properties": {
"age":{
"type":"integer"
},
"name":{
"type":"text"
}
}
}
}
}
}
}
PUT test_index/doc/1
{
"obj":[
{
"name":"alice white",
"age":34
},
{
"name":"peter brown",
"age":26
}
]
}
GET test_index/_search
{
"query": {
"match": {
"obj.name": "peter"
}
}
}
- 嵌套类型 nested object
PUT test_index
{
"mappings": {
"doc": {
"properties": {
"man":{ #设置man字段为nested类型
"type": "nested",
"properties": {
"age":{
"type":"integer"
},
"name":{
"type":"text"
}
}}}}}}}
PUT test_index/doc/1
{
"man":[
{
"name":"alice white",
"age":34
},
{
"name":"peter brown",
"age":26
}
]
}
# 嵌套类型的字段的查询和聚合:
GET test_index/_search
{
"query": { #查询
"nested": { #关键字
"path": "man",
"query": {
"match": {
"man.name": "peter"
}
}
}
},
"size": 0,
"aggs": {
"man": {
"nested": { #聚合关键字
"path": "man"
},
"aggs": {
"avg_age": {
"avg": {
"field": "man.age"
}
}
}}}}
-
- 记录ip地址 ip
- 实现自动补全 completion
- 记录分词数 token_count
- 记录字符串hash值 murmur3
- percolator
- join
mapping参数:
-
- -true 允许自动将检测到的新字段加到映射中(默认的)
- -false 不允许自动新增字段,文档可以写入,但无法对字段进行搜索等操作。不会添加在映射中。且在kibana上面看到的新字段上会显示一个黄色感叹号,刷新index pattern也无效。
- -strict 文档不能写入,写入会报错
- analyzer 指定分词器
- ignore_above 超过ignore_above的字符串将不会被索引或存储
PUT test_index
{
"mappings": {
"doc":{
"properties": {
"message":{
"type": "keyword",
"ignore_above": 20 #字段值超过20个字符的字符串不会被索引或者存储
}
}
}
}
}
POST test_index/doc/_bulk
{"index":{"_id":1}}
{"message":"test message"}
{"index":{"_id":2}}
{"message":"test message with some long stacktrace messages test test"}
GET test_index/_search
{
"size": 0,
"aggs": {
"message": {
"terms": {
"field": "message",
"size": 10
}
}
}
}----------------------->只能得到第一个桶
"buckets": [
{
"key": "test message",
"doc_count": 1
}
]
GET test_index/_search
{
"query": {
"query_string": {
"default_field": "message",
"query": "*message*"
}
}
}
------------->只能搜索到id为1的文档
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "test_index",
"_type": "doc",
"_id": "1",
"_score": 1,
"_source": {
"message": "test message"
}
}
]
- index true | false 控制字段是否被索引,默认为true。
- doc_values 本质是一个序列化的列式存储 。列式存储适用于聚合,排序,脚本操作。
-
- true 默认对除了analyzed strings以外的所有字段开启。
- false 不能用于聚合、排序和脚本操作
- fields 对同一字段采用不同类型配置。比如string字段映射为text做全文搜索,映射为keyword做聚合和排序
PUT test_index
{
"mappings": {
"doc":{
"properties": {
"name":{
"type": "text", #text类型,用于全文检索
"fields": {
"keyword":{ #name.keyword
"type": "keyword" #keyword类型,用于排序和聚合
}
}
}
}
}
}
}
PUT test_index/doc/1
{
"name":"Jack smis"
}
PUT test_index/doc/2
{
"name":"Jack"
}
GET test_index/_search
{
"query": {
"match": {
"name": "jack" #text类型字段
}
},
"sort": [
{
"name.keyword": { #keyword类型字段
"order": "desc"
}
}
],
"aggs": {
"name_count": {
"value_count": {
"field": "name.keyword" #keyword类型字段
}
}
}
}
- properties object字段或nested字段包含子字段,称为properties。properties可以是任何数据类型
PUT test_index
{
"mappings": {
"doc": {
"properties": {
"dev":{ #object类型字段
"properties": {
"name":{
"type":"text"
},
"age":{
"type":"integer"
}
}
},
"rel":{
"type": "nested", #nested类型字段
"properties": {
"age":{
"type":"integer"
},
"name":{
"type":"text"
}
}
}
}
}
}
}
PUT test_index/doc/1
{
"dev":{
"name":"john smith",
"age":23
},
"rel":[
{
"name":"alice white",
"age":34
},
{
"name":"peter brown",
"age":26
}
]
}
- norms 时间评分因子,如果不关心评分可以禁用
Dynamic mapping
es可以自动识别字段类型,依靠json文档的字段类型来实现自动识别。支持的类型如下:
json es
null: 忽略
boolean: boolean
浮点数: float
整数: long
object: object
string:日期设为 date类型(默认开启)。
数字设为 float或者 long类型(默认关闭)。
设为 text类型,并附带 keyword的子字段。
dynamic field mapping 动态字段映射
- date detection 日期检测 默认开启
#当创建一个日期格式的文档时dynamic_date_formats为
# ["strict_date_optional_time","yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z"]
PUT t-index/doc/1
{
"create_date":"2018/07/03"
}
--------------》
{
"t-index": {
"mappings": {
"doc": {
"properties": {
"create_date": {
"type": "date", #自动识别日期为date类型
"format": "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis"
}}}}}}
#禁用日期检测 设置date_detection为false的情况
PUT t-index
{
"mappings": {
"doc":{
"date_detection": false
}
}
}
PUT t-index/doc/2
{
"new_date":"2018/05/20"
}
GET t-index/_mapping
--------------------------》
{
"t-index": {
"mappings": {
"doc": {
"date_detection": false,
"properties": {
"new_date": {
"type": "text", #日期为text类型
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}}}}}}}}}
- dynamic_date_formats 自定义日期格式
PUT t2-index
{
"mappings": {
"doc": {
"dynamic_date_formats": ["yyyy-MM-dd"]
}
}
}
PUT t2-index/doc/1
{
"create_time":"2018-07-03"
}
GET t2-index/_mapping
--------------------》
{
"t2-index": {
"mappings": {
"doc": {
"dynamic_date_formats": [
"yyyy-MM-dd"
],
"properties": {
"create_time": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}}}}}}}}
- numeric_detection 默认不会自动识别字符串里面的数字。可以开启
PUT t-index
{
"mappings": {
"doc": {
"numeric_detection": true #打开数字检测
}
}
}
PUT t-index/doc/1
{
"my_float":"1.2",
"my_integer":"1"
}
GET t-index/_mapping
--------------------》
{
"t-index": {
"mappings": {
"doc": {
"numeric_detection": true,
"properties": {
"my_float": {
"type": "float" #自动检测1.2为float
},
"my_integer": {
"type": "long" #自动检测1为long
}}}}}}
dyamic-templates 动态模板
格式为:
"dynamic_templates": [ #数组,可以指定多个匹配规则
{
"my_template_name": { #template名称
"match_mapping_type":"string", #匹配规则
"mapping":{
... #设置mapping信息
}
}
},
...
]
#举个栗子 以message开头的字段设为text类型,其他string设置成keyword
PUT test_index
{
"mappings": {
"doc": { # type
"dynamic_templates":[ # 关键字
{
"message_as_text":{ #模板名称
"match_mapping_type":"string", #匹配条件
"match":"message*", #匹配message开头的字段
"mapping":{ #设置mapping
"type":"text"
}
}
},
{
"string_as_keyword":{ # 模板名称
"match_mapping_type":"string", #匹配条件
"mapping":{ #设置mapping
"type":"keyword",
"ignore_above":256
}
}
}]}}}
匹配条件有:match_mapping_type, match, match_pattern, unmatch, path_match, path_unmatch.
自动检测类型有 :boolean, date, double, long, object, string
-
PUT my_index
{
"mappings": {
"doc":{
"dynamic_templates":[
{
"my_string":{
"match_mapping_type":"string",
"mapping":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":265
}
}
}
}
}
]
}
}
}
PUT my_index/doc/1
{
"name":"Jahn smis"
}
GET my_index/_mapping
------------------->
{
"my_index": {
"mappings": {
"doc": {
"dynamic_templates": [
{
"my_string": {
"match_mapping_type": "string",
"mapping": {
"fields": {
"keyword": {
"ignore_above": 265,
"type": "keyword"
}
},
"type": "text"
}
}
}
],
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 265
}
}
}
}
}
}
}
}
- match,unmatch 匹配字段名称
PUT my_index
{
"mappings": {
"_doc": {
"dynamic_templates": [
{
"longs_as_strings": {
"match_mapping_type": "string",
"match": "long_*",
"unmatch": "*_text",
"mapping": {
"type": "long"
}
}
}
]
}
}
}
- path_match ,path_umatch
PUT my_index
{
"mappings": {
"_doc": {
"dynamic_templates": [
{
"full_name": {
"path_match": "name.*",
"path_unmatch": "*.middle",
"mapping": {
"type": "text",
"copy_to": "full_name"
}
}
}
]
}
}
}
Index Templates 索引模板
定义在创建新索引时自动应用的模板。模板包括setting和mapping和index_patterns
api:
GET _cat/templates
PUT|GET|DELETE _template/test_template
PUT _template/nginx-access
{
"order": 0, # order 设置优先级
"index_patterns": [ # 匹配索引名称
"nginx-access*" #以nginx-access开头的索引会应用该模板
],
"settings": { # 索引setting配置
"index": {
"number_of_shards": "6",
"refresh_interval": "5s"
}
},
"mappings": { #mapping配置
"doc": {
"date_detection": false,
"dynamic_templates": [
{
"string_fields": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"type": "keyword",
"norms": false,
"ignore_above": 256
}
}
}
],
"properties": {
"@timestamp": {
"type": "date"
},
"@version": {
"type": "keyword"
},
"url_args": {
"type": "nested",
"properties": {
"key": {
"type": "keyword"
},
"value": {
"type": "keyword"
}
}
}
}
}
}
}