一,写在前面的话,elasticsearch 建立索引时的Mapping 设置

建议你在设计索引的初期,就把索引的各个字段设计好,因为,elasticsearch 的各个字段,定义好类型后,就无法进行修改了。

另外需要注意的点有如下

注意1:不要在一个索引中定义多个type。

6.X版本已经不支持,7.X版本彻底不支持。

扩展问题:5.X版本的父子文档实际实现中是一个索引中定义了多个type,到了6.X中实现方式改变为:join方式。

注意2:将Set _source设置为false。

假设你只关心度量结果,不是原始文件内容。

将节省磁盘空间并减少IO。

比如,你可以把原始的数据存储在mysql ,hbase 等其他地方,从es 中得到id 后,去相应的数据库中进行取数据

举例:

“_source”:{

“enabled”:false

},

注意3:将_all设置为false。

假设你确切地知道你对哪个field做查询操作?

能实现性能提升,缩减存储。

举例:

“_all”:{

“enabled”:false },

注意4:设置dynamic = strict。

假设你的数据是结构化数据。

字段设置严格,避免脏数据注入。

举例:

“dynamic”:”strict”,

注意5:使用keyword类型

假设你只关心完全匹配

提高性能和缩小磁盘存储空间

举例:

“CLF_CustomerID”:{

“type”:”keyword”

},

注意6:使用别名

二,elasticsearch 别名处理

首先看一下索引别名的建立和删除

1,建立索引别名(如下显示的是建立test1 的索引别名 alias1)

curl -X POST "localhost:9200/_aliases" -H 'Content-Type: application/json' -d'
{
"actions" : [
{ "add" : { "index" : "test1", "alias" : "alias1" } }
]
}
'

2,删除索引的别名(如下显示的是删除test1 的索引别名 alias1)

curl -X POST "localhost:9200/_aliases" -H 'Content-Type: application/json' -d'
{
"actions" : [
{ "remove" : { "index" : "test1", "alias" : "alias1" } }
]
}
'

3, 索引和索引别名之间的关系是多对多的关系

也就是说1个索引别名可以对应多个索引,一个索引可以有多个索引别名。

三,elasticsearch 别名的使用,实战运用

1,举例子。

首先,

举例,比如你有一个索引,名字叫做zebra_info_data,那么建议你线上的产品,利用别名机制机制,然后,搜索的时候,你就可以用别名进行搜索了

curl -X PUT "master:9200/zebra_info_data/_alias/zebra_info_data_alias"

搜索的时候,你就可以使用别名搜索了,类似如下:

 curl -XGET "master:9200/zebra_info_alias/_search?pretty"

2,另外的例子

1, 建立索引test

2, 建立索引test_2

3, 给索引test_2 添加别名 test, 并且删除 test 索引,Ok, 现在数据搜索由test 到test_2

curl -X PUT "localhost:9200/test"
curl -X PUT "localhost:9200/test_2"
curl -X POST "localhost:9200/_aliases" -H 'Content-Type: application/json' -d'
{
"actions" : [
{ "add": { "index": "test_2", "alias": "test" } },
{ "remove_index": { "index": "test" } }
]
}
'

3,另外的例子。

下面的例子,显示了用索引别名进行搜索的优势, 这样就可以不影响线上的服务,而在后台偷偷做手脚了

curl -X POST "localhost:9200/_aliases" -H 'Content-Type: application/json' -d'
{
"actions": [
{ "remove": { "index": "my_index_v1", "alias": "my_index" }},
{ "add": { "index": "my_index_v2", "alias": "my_index" }}
]
}
'

4, 其他,比如查看,以及删除。

删除logs_20162801指向的别名 current_day
curl -X DELETE "localhost:9200/logs_20162801/_alias/current_day" 删除所有指向current_day 的索引引用
curl -X DELETE "localhost:9200/*/_alias/current_day" 查看所有指向logs_20162801 的别名
GET /logs_20162801/_alias/* 查看zebra_geo_poi 这个别名指向的所有别名。 curl -XGET 'http://172.16.232.242:9200/_alias/zebra_geo_poi?pretty'

四,写在后面的话。

建议在设计index 的初期,就把索引建立好,后期就不用进行修改了。应为这里的零停机升级服务,或者说重新索引的的数据,是花费巨大的资源为代价的。

另外,附上官网中的别名api 一份,不要太感谢本小生了。

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html

elasticsearch 5.x 系列之七 基于索引别名的零停机升级服务的更多相关文章

  1. ElasticSearch(三十)基于scoll+bulk+索引别名实现零停机重建索引

    1.为什么要重建索引? 总结,一个type下的mapping中的filed不能被修改,所以如果需要修改,则需要重建索引 2.怎么zero time重建索引? 一个field的设置是不能被修改的,如果要 ...

  2. elasticsearch 5.x 系列之四(索引模板的使用,详细得不要不要的)

    1,首先看一下下面这个索引模板 curl -XPUT "master:9200/_template/template_1?pretty" -H 'Content-Type: app ...

  3. Elasticsearch顶尖高手系列课程推荐

    Elasticsearch,是目前行业中非常热门的一个技术.Elasticsearch是一种分布式的海量数据搜索与分析的技术,可以用于电商网站.门户网站.企业IT系统等各种场景下的搜索引擎,也可以用于 ...

  4. Elasticsearch之索引模板index template与索引别名index alias

    为什么需要索引模板? 在实际工作中针对一批大量数据存储的时候需要使用多个索引库,如果手工指定每个索引库的配置信息(settings和mappings)的话就很麻烦了. 所以,这个时候,就存在创建索引模 ...

  5. elasticsearch系列二:索引详解(快速入门、索引管理、映射详解、索引别名)

    一.快速入门 1. 查看集群的健康状况 http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 ...

  6. elasticsearch最全详细使用教程:入门、索引管理、映射详解、索引别名、分词器、文档管理、路由、搜索详解

    一.快速入门1. 查看集群的健康状况http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 状 ...

  7. Elasticsearch系列---实战零停机重建索引

    前言 我们使用Elasticsearch索引文档时,最理想的情况是文档JSON结构是确定的,数据源源不断地灌进来即可,但实际情况中,没人能够阻拦需求的变更,在项目的某个版本,可能会对原有的文档结构造成 ...

  8. Elasticsearch 索引别名与Template

    在使用elasticsearch的时候,经常会遇到需要淘汰掉历史数据的场景. 为了方便数据淘汰,并使得数据管理更加灵活,我们经常会以时间为粒度建立索引,例如: 每个月建立一个索引:monthly-20 ...

  9. ES 10 - Elasticsearch的索引别名和索引模板

    目录 1 索引模板概述 1.1 什么是索引模板 1.2 索引模板中的内容 1.3 索引模板的用途 2 创建索引模板 3 查看索引模板 4 删除索引模板 5 模板的使用建议 5.1 一个index中不能 ...

随机推荐

  1. [Java][Liferay] File system in liferay

    EditFileEntryAction.java protected FileEntry updateFileEntry(PortletConfig portletConfig, ActionRequ ...

  2. intellijidea课程 intellijidea神器使用技巧1-5 idea界面介绍

    菜单栏介绍: file:文件操作edit:文本操作view:视图操作navigate:跳转code:源码文件analyze:项目依赖关系分析refactor:代码重构快捷操作,如:抽取函数build: ...

  3. laravel下的ORM数据映射之自由畅想

    此处以Model::get()方法和Model::first()方法为例 public static function get($data=[]){//默认是空数组 if(count($data)== ...

  4. thinkphp 创建数据对象之data方法

    创建数据对象:data()方法 1.功能:给模型对象$data赋值,将模型对象转化为数据对象 tip:模型对象与数据对象之间就差一个赋过值的$data; 2.方法:data()其源码如下: tip:源 ...

  5. HTML超链接实用

    1.文本链接: <a href="http://www.meng.com/" target="_blank">访问meng!</a> 2 ...

  6. em和rem的区别

    rem和em单位一样,都是一个相对单位,不同的是em是相对于元素的父元素的font-size进行计算,rem是相对于根元素html的font-size进行计算,这样一来rem就绕开了复杂的层级关系,实 ...

  7. Object in Java same as pointer

    到目前为止,读者应对对象的“传递”有了一个较为深刻的认识,记住实际传递的只是一个句柄. 然而准确地说,Java是有指针的!事实上,Java中每个对象(除基本数据类型以外)的标识符都属于指针的一种.但它 ...

  8. SQL Server 2008 角色

    固定服务器角色:按照从最低级别的角色(bulkadmin)到最高级别的角色(sysadmin)的顺序进行描述:Bulkadmin:这个服务器角色的成员可以运行BULK INSERT语句.这条语句允许从 ...

  9. 仿照everything写的一个超级速查 原创

    http://files.cnblogs.com/files/jacd/%E8%B6%85%E9%80%9F%E6%9F%A5%E6%96%87%E4%BB%B6.zip 速度奇快无比,体积奇小无比, ...

  10. avast从隔离区恢复后,仍无法打开被误杀文件的解决方案

    从隔离区中手动恢复后,隔离区中被恢复的文件将不再展示. 此时,如果手动恢复的文件仍无法打开(图标此时也异常),请: 将avast禁用: 将avast启用. 然后尝试重新打开被误隔离并手动恢复的文件.