Quantcast
Channel: IT瘾博客推荐
Viewing all articles
Browse latest Browse all 532

es的mapping设置 - 一只自由自在的鱼 - 博客园

$
0
0

 自定义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"
                }
              }
            }}}}
      复制代码
  • 地理类型
    • geo_point
    • geo_shape
  • 专用类型
    • 记录ip地址 ip
    • 实现自动补全 completion
    • 记录分词数 token_count
    • 记录字符串hash值 murmur3
    • percolator
    • join

mapping参数:

  • dynamic 参数动态添加新字段
    • -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.

  • match_mapping_type

            自动检测类型有 :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"
              }
            }
          }
      }
    }
  }
}
复制代码

 


Viewing all articles
Browse latest Browse all 532

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>