赞
踩
映射定义索引中有什么字段,字段的类型等结构信息.
类比数据库中的表结构定义
ES中,支持手动定义映射,动态映射两种方式
示例:
/*
映射定义后续是可以进行修改的
*/
PUT testmapping
{
"mappings" : {
"properties" : {
"field1" : { "type" : "text" }
}
}
}
ES最先的设计是用索引类比关系型数据库的数据库,mapping type 类比 数据库表, 一个索引中可以包含多个映射别.
这种类比存在一个严重的问题,如果当多个mapping type中存在同名字段,而且同步字段还是不同的类型时,在一个索引中就会不好处理.因为索引引擎中只有 索引 - 文档的结构,换句话说,数据库关系型数据库中,表之间是相互独立的。一个表中的列与另一个表中同名的列没有关系。然而在映射类型中有相同名称字段的不同映射类型是由同一个字段支持的,
即相当于user表中的user_name和member表中的user_name是存储在同一个字段上的
Maaping映射示例:
PUT twitter
{
"mappings": {
"_doc": {
"properties": {
"type": { "type": "keyword" },
"name": { "type": "text" },
"user_name": { "type": "keyword" },
"email": { "type": "keyword" },
"content": { "type": "text" },
"tweeted_at": { "type": "date" }
}
}
}
}
字段类型定义了该如何索引存储字段值.
官网: https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html
核心类型 | 示例 |
---|---|
string | text and keyword |
Numeric datatypes | long, integer, short, byte, double, float, half_float, scaled_float |
Date datatype | date |
Boolean datatype | boolean |
Binary datatype | binary |
Range datatypes | integer_range, float_range, long_range, double_range, date_range |
…
字段的type(Datatype)定义了如何索引存储字段值, 还有一些属性可以让我们根据需要来覆盖默认的值或进行特别定义
官网: https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-params.html
字段 | 作用 | 字段 | 作用 |
---|---|---|---|
analyzer | 指定分词器 | ignore_malformed | |
normalizer | 指定标准化器 | index_options | |
boost | 指定权重值 | index | |
coerce | 强制类型转换 | fields | |
copy_to | 值复制给另一字段 | norms | |
doc_values | 是否存储docValues | null_value | |
dynamic | position_increment_gap | ||
enabled | 字段是否可用 | properties | |
fielddata | search_analyzer | ||
eager_global_ordinals | similarity | ||
format | 指定时间值的格式 | store | |
ignore_above | term_vector |
当我们需要对一个字段进行多种不同方式的索引时, 可以使用fields多重字段定义.
如一个字符串字段即需要进行text分词索引,也需要进行keyword关键字索引来支持排序,聚合
或者需要用㓊分词器进行分词索引
// city,raw这2个是自定义的 PUT my_index { "mappings": { "_doc": { "properties": { "city": { "type": "text", "fields": { "raw": { "type": "keyword" } } } } } } }
添加数据
PUT my_index/_doc/1
{
"city": "Beijing"
}
PUT my_index/_doc/1
{
"city": "Shanghai"
}
查询
GET my_index/_search { "query": { "match": { "city": "beijing" } }, "sort": { "city.raw": "asc" }, "aggs": { "Cities": { "terms": { "field": "city.raw" } } } }
元字段是ES中定义的文档字段
官网: https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-fields.html
可以快速使用ES,不需要先创建索引,定义映射.
例如:
PUT data/_doc/1
{ "count": 2 }
es将自动为我们创建data索引,映射,类型为long的字段count
- 索引文档时,当有新字段,ES将根据我们字段的json的数据类型为我们自动加入字段定义到mapping中
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。