索引管理
创建索引
直接创建索引 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和doubledates:日期类型,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_typetext类似类型,用于按需输入完成。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 检测到的数据类型进行操作matchunmatch:match使用pattern匹配字段名称,unmatch使用正则排除字段path_matchpath_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}后面。
| |