索引管理
创建索引
直接创建索引 PUT newindex1
,创建索引可以通过 number_of_shares
和 number_of_replicas
数量来修饰分片和副本的数量。
|
|
number_of_shares
分片数在创建索引后不能修改
number_of_replicas
副本数可以随时完成修改
删除索引
DEL index_name
打开/关闭索引
POST {index_name}/_close
POST {index_name}/_open
关闭的索引无法进行【增删改查】操作
|
|
索引的映射 mapping
mapping是定义文档及包含字段的存储与索引方式。可以理解为是elasticsearch的表结构,定义mapping,即在创建index时,自行判断每个字段的类型,而不是有ES自动自动判断每个纬度的类型。这种更贴合业务场景,如分词、存储。
每个索引仅有一个映射类型(elasticsearch6.x+,之前版本一个索引下有多个类型),它决定了文档将如何被索引。而映射类型分为两部分 meta-fields
与 field of properties
meta-fields
:为文档的源数据,如 _index
(索引的名称)、_type
(文档的类型,7.0+弃用)、_id
(索引的ID)和 _source
(用于关联文档源数据)字段
field of properties
:字段属性,包含文档的字段或属性列表。
字段的数据类型
常见类型
binary
:二进制或Base64字符串。boolean
: 布尔值true
和false
。keywords
:keyword
,constant_keyword
, 和wildcard
.Numbers
:数值类型,例如long
和double
dates
:日期类型,date
和date_nanos
。alias
: 为以有字段定义别名。
对象嵌套类型
object
:JSON对象。flattened
:整个JSON对象作为单个字段值。nested
:嵌套,与子字段之间保留关系的json对象。join
:为同一索引中的文档定义父/子关系。
结构化类型
range
:,long_range
,double_range
,date_range
,和ip_range
。ip
:IPv4和IPv6地址。version
:软件版本号。支持 语义化版本号 优先规则。murmur3
:计算并存储值的散列。
汇总数据类型
aggregate_metric_double
:预汇总的指标值。histogram
:以直方图形式预汇总的数值。
文字搜寻类型
text
:分析的非结构化文本。annotated-text
:包含特殊标记的文本。用于标识命名实体。completion
:用于自动补全建议。search_as_you_type
text
类似类型,用于按需输入完成。token_count
:计数令牌。
等等 reference。
常用字段数据类型参数
更多参数可以参考官方文档:mapping-params
字段 | 说明 |
---|---|
analyzer | 仅text 字段支持 analyzer 映射参数。 |
index | 选项控制是否对字段值建立索引。默认为true 。未索引的字段不可查询。 |
index_prefixes | 启用术语前缀的索引,以加快前缀搜索的速度 |
ignore_above | 长度大于 ignore_above设置的字符串将不会被索引或存储 |
映射的元字段
文档的元字段是保证系统正常运转的内置字段,如 _index
索引的字段 _type
映射类型(7.0后取消),_id_
文档主键。
动态映射 dynamic
在关系型数据库中,需要事先创建好数据库,并在库中插入表。而ES中需要事先创建好索引结构(Mapping),在插入文档到索引中,系统会根据文档内容进行索引的动态映射。自动检测添加新类型和字段,被成为动态映射。
禁用动态映射:{index_name}/_mapping
dynamic
为false
|
|
显式映射
实现准备好映射关系,包含文档各字段类型,关系等,这种称之为显式映射 Explicit mapping
动态模板
动态映射会自动推断数据类型,但这种并不完全符合所有的业务需求,而动态模板可以再动态映射之外更好的控制ES如何映射的数据类型。
模板的匹配
match_mapping_type
对 Elasticsearch 检测到的数据类型进行操作match
unmatch
:match
使用pattern匹配字段名称,unmatch
使用正则排除字段path_match
path_unmatch
使用与match一样,这里为全名称,path指的是多层json的路径。
如,需要将所有数字字段映射为integer而不是long,将所有字符串都映射为text与keyword:
|
|
可以使用正则表达式来匹配字段
|
|
查看映射后的类型
|
|
path_match
path_unmatch
|
|
当插入下列时,不成功,这里映射类型为text,与address中的对象类型不匹配所以不成功
|
|
模板变量
{name} {dynamic_type} 占位符,在映射中会替换为字段名和检测到的动态类型
|
|
reference template-variables
索引的类型
Elasticsearch7.x中,不在需要document的 type
schedule_for_removal_of_mapping_types
ElasticSearch在7.x版本之前 index
类似于数据库中的 database
,而 type
等同于数据库中的 table
如:6.x API
|
|
而在7.x之后版本可以不需要
|
|
在7.0以上版本使用时,必须使用 /{index_name}/_doc/{_id}
进行调用。
_doc
为路由永久组成,可以理解为 _doc
替换之前的 type
|
|
对于7.0之前的/{index}/{type}/{action}
,的操作如_update
、_search
将紧跟{action}
后面。
|
|