【ES】--Elasticsearch的索引别名和主副分片

目录

  • 一、ES的别名
  • 二、ES的分片
  • 三、ES的别名的增删改查
    • 3.1、创建别名/分片的代码示例
    • 3.2、CRUD代码示例

一、ES的别名

为什么使用ES别名?
灵活的扩容。
动态的滚动查询。 例如“在不同的索引创建窗口”。
进行索引分组。
使用别名过滤器来屏蔽文档,他们可以对正在执行的查询自动地实施过滤。
结合别名和路由,在查询或索引的时候自动地使用路由值。

二、ES的分片

分片作用:
(1)、更好的分布式存储、扩展。
(2)、高效地平行查询。
副本的作用:
(1)、保证数据完整性,节点出现异常时,充当主分片。
(2)、优化查询效率,副本的数据和主分片一致,可以充分发挥查询时的效率。

集群索引出现创建、搜索慢,如何解决?
硬件上进行节点的增加;
重建索引,重新划分主副节点数量【可以使用别名来平滑的操作】;

三、ES的别名的增删改查

插入数据
插入数据时,按照“具体index”来插入数据,同时可以设置别名。

查询数据
根据id/其他属性去搜索“具体index”。—可以查询
根据“别名”来查询所有索引的数据。—可以查询

删除数据
根据“具体index”删除,deleteByQuery方式删除;—可以删除
根据“别名”删除,deleteByQuery方式删除;—可以删除
【----原因:根据条件查询到具体索引的记录,然后对查询到的数据按照“具体index”进行删除。】
根据“具体index”及主键id,先查询数据,然后“具体index”删除。—可以删除
根据“别名”及主键id,先查询数据,然后“具体index”删除。—可以删除

3.1、创建别名/分片的代码示例

public String getIndexName(String index, String type) {if ("month".equals(type)) {String yyyyMM = new SimpleDateFormat("yyyyMM").format(new Date());return index + "-" + yyyyMM;}if ("quarter".equals(type)) {return getQuarterFirstMonth(index);}if ("year".equals(type)) {String yyyy = new SimpleDateFormat("yyyy").format(new Date());return index + "-" + yyyy;}return "";}public String insert(T entity) throws Exception {//确定当前ES的索引是否需要  按时间生成新的String newIndexName = getIndexName(entity.getIndex(),"year"); //默认生成 todoentity.setIndex(newIndexName);//生成 n个分片+副分片、并生成别名//例如 Index为test_file-2023,别名是test_fileString alias = entity.getIndex().substring(0,entity.getIndex().lastIndexOf("-"));if(!checkIndexExist(newIndexName)){ //校验具体索引是否已经创建createIndexWithAlias(newIndexName,alias); //创建有别名的索引,并进行分片}IndexRequest request = new IndexRequest(newIndexName);request.id(entity.getId()).source(JSONObject.toJSONString(entity), XContentType.JSON).create(false);IndexResponse response = client.index(request, RequestOptions.DEFAULT);String name = response == null ? null : response.getResult().name();log.info("ES执行插入:index:{},type:{},id:{}", newIndexName, request.type(), request.id());return name;}

校验索引是否已经创建

   public boolean checkIndexExist(String index) throws Exception {GetIndexRequest getIndexRequest = new GetIndexRequest(index);boolean exists = client.indices().exists(getIndexRequest, RequestOptions.DEFAULT);if (exists) {return true;}return false;}

创建别名/分片。

 public boolean createIndexWithAlias(String index,String alias) throws IOException {CreateIndexRequest indexRequest = new CreateIndexRequest(index);indexRequest.settings(Settings.builder().put("index.number_of_shards", 2).put("index.number_of_replicas", 1));if(StringUtils.isNotBlank(alias)){indexRequest.alias(new Alias(alias));}CreateIndexResponse response = client.indices().create(indexRequest, RequestOptions.DEFAULT);return response.isAcknowledged();}

3.2、CRUD代码示例

    public Object testTransfer( Map<String, Object> itemMap){List<String> dmcIds = (List<String>)itemMap.get("dmc_ids");String scene = (String)itemMap.get("scene");List<String> ids = (List<String>)itemMap.get("ids");JSONObject testDoc = (JSONObject)itemMap.get("file_transfer");TransferEsDo transferDoc = JSONObject.parseObject(JSON.toJSONString(testDoc),TransferEsDo.class);/*** 事先有别名  file_transfer_wwy  ,索引有 file_transfer_wwy-2022、file_transfer_wwy-2023*///ES分片的插入数据if("1".equals(scene)){try{transferElasticRepository.insert(transferDoc);}catch (Exception e){log.error("testTransfer scene=1 ");}}//从ES查询记录if("2".equals(scene)){//根据实际Index查询或别名查询BoolQueryBuilder boolBuilder = new BoolQueryBuilder();if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(ids)){BoolQueryBuilder idBuilder = new BoolQueryBuilder().must(QueryBuilders.termsQuery("_id",ids));boolBuilder.should(idBuilder);}if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(dmcIds)){BoolQueryBuilder fileIdBuilder = new BoolQueryBuilder().must(QueryBuilders.termsQuery("file_id.keyword",dmcIds));boolBuilder.should(fileIdBuilder);}SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.query(boolBuilder);searchSourceBuilder.from(0);searchSourceBuilder.size(100);SearchRequest searchRequest = new SearchRequest(transferDoc.getIndex());searchRequest.source(searchSourceBuilder);List<TransferEsDo> transferReList = new ArrayList<>();try {SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);for (SearchHit searchHit : searchResponse.getHits()) {transferReList.add(JSON.parseObject(searchHit.getSourceAsString(), TransferEsDo.class));}} catch  (Exception e){log.error("testTransfer dmcIds:{},ex:{}", JSON.toJSONString(dmcIds),e.getMessage());}}if("3".equals(scene)){ //根据别名或实际index删除DeleteByQueryRequest request = new DeleteByQueryRequest(transferDoc.getIndex());request.setQuery(QueryBuilders.termsQuery("file_id.keyword",transferDoc.getFileId()));try{restHighLevelClient.deleteByQuery(request, RequestOptions.DEFAULT);}catch (Exception e){log.error("testTransfer fileId deleteByQuery ex:{}",e.getMessage());return false;}}if("4".equals(scene)){ //根据别名或实际index删除try{//还是根据id,index或别名获取到记录,然后按照实际的indexName和id进行删除SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();sourceBuilder.query(QueryBuilders.termsQuery("id", Arrays.asList(transferDoc.getId())));sourceBuilder.size(10000);SearchRequest searchRequest = new SearchRequest(transferDoc.getIndex());searchRequest.source(sourceBuilder);SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);SearchHits hits = searchResponse.getHits();List<TransferEsDo> result = new ArrayList<>();for (SearchHit hit : hits.getHits()) {result.add(JSON.parseObject(JSON.toJSONString(hit.getSourceAsMap()), TransferEsDo.class));}DeleteRequest request = new DeleteRequest(result.get(0).getIndex(), result.get(0).getId());DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);}catch (Exception e){log.error("testTransfer fileId deleteByQuery ex:{}",e.getMessage());return false;}}return false;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/234055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Spring】14 ApplicationEventPublisherAware 接口

文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动3.5 工作流程图 4. 应用场景总结 Spring 框架为开发者提供了丰富的扩展点&#xff0c;其中之一是 Bean 生命周期中的回调接口。本文将专注介绍一个与事件发布相关的接口 Applicatio…

【SQLite】SQLite数据库简单使用与Navicat安装-加密

Sqlite为免安装数据库&#xff0c;安装步骤总结&#xff1a; 官网下载Sqlit数据库&#xff0c;官网下载地址:https://www.sqlite.org/download.html 下载: sqlite-dll-win64-x64-3390400.zip或者32位sqlite-dll-win32 sqlite-tools-win-x64-3440200.zip或者32位sqlite-tools-wi…

Opencv入门五 (显示图片灰度值)

源码如下&#xff1a; #include <opencv2/opencv.hpp> int main(int argc, char** argv) { cv::Mat img_rgb, img_gry, img_cny; cv::namedWindow("Example Gray",cv::WINDOW_AUTOSIZE); cv::namedWindow("Example Canny", cv::WINDOW_…

java获取时间相差8小时的各种情况

1&#xff1a;三种时间差错情况 1-1&#xff1a;java的new date&#xff08;&#xff09;获取的时间和本地时间相差8小时&#xff0c;解决方法 //可以main启动方法设置 TimeZone.setDefault(TimeZone.getTimeZone("GMT8"));1-2&#xff1a;存入mysql数据库的时候时间…

数据结构算法-二分查找算法

引言 二分查找算法 我们应该也不陌生 就在分治法把他说得彻彻底底了 但分而治之算法思想 只是算法的部分 递归 和循环那个效率高呢 很明显循环 所以不必要多说 直接干 二分查找算法核心思路 二分查找算法是一种在有序数组中查找特定元素的搜索算法。 它的核心思路是每次查找…

若依vue前端 报错error:0308010C:digital envelope routines::unsupported一步到胃的解决方法

第一步: 直接打开package.json 第二步: 直接替换scripts的内容为下面的内容 "scripts": {"dev": "SET NODE_OPTIONS--openssl-legacy-provider && vue-cli-service serve","build:prod": "SET NODE_OPTIONS--openssl-leg…

无源晶振电路中两端电阻和电容的作用

无源晶振电路中两端电阻和电容的作用是什么&#xff0c;今天晶发电子就详细讲讲&#xff0c;具体如下&#xff1a; 一、并联电阻的作用 配合IC内部电路组成负反馈、移相&#xff0c;使放大器工作在线性区。 并联降低谐振阻抗&#xff0c;使无源晶振易启动。 并联电阻取值大小…

【深度学习】语言模型与注意力机制以及Bert实战指引之二

文章目录 前言 前言 这一篇是bert实战的完结篇&#xff0c;准备中。

BeanPostProcessor 接口的概述

目录 作用与功能 主要方法 使用场景 注意事项 结论 作用与功能 BeanPostProcessor 是 Spring 框架提供的一个扩展接口&#xff0c;允许开发者在 Spring 容器的 bean 创建过程中&#xff0c;即实例化及初始化阶段&#xff08;依赖注入之后&#xff09;&#xff0c;插入自定…

StringBad的构造函数和解析函数

// pass by value-程序清单 12.3 vegnews.cpp // vegnews.cpp -- using new and delete with classes // compile with strngbad.cpp #include <iostream> using std :: cout: finclude "strngbad.h"void callmel (StringBad 6): // pass by reference void ca…

Excel_VBA实现:弹出对话框进行打开另存(附FileDialog 属性)

excel_vba可实现弹窗进行人机交互&#xff0c;本案例实现弹窗选择需要打开的excel文件&#xff0c;选择文件后打开该文件&#xff0c;然后弹窗提示该文件另存为路径及目录&#xff0c;代码如下&#xff1a; Sub 打开文件对话框() On Error Resume Next With Application.FileD…

【vCenter Converter】VMware vCenter Converter Standalone 理论, 下载与安装要求

目录 1. vCenter Converter 概述1.1 作用与特征&#xff08;1&#xff09;性能和可靠性&#xff08;2&#xff09;互操作性&#xff08;3&#xff09;管理 2. 下载 vCenter Converter Standalone3. 安装 vCenter Converter Standalone3.1 系统要求&#xff08;1&#xff09;支持…

邦芒支招:9个职场有效沟通技巧

在职场中&#xff0c;高效沟通是至关重要的。以下是一些建议&#xff0c;帮助你在工作职场中实现高效沟通&#xff1a; 1、明确目标&#xff1a;在开始沟通之前&#xff0c;确保你清楚自己的目标和期望结果。明确你的沟通目的&#xff0c;以便在沟通过程中保持专注和针对性。 2…

文件消失但是有占用内存的恢复方法

文件消失但占用内存是一个常见的问题&#xff0c;通常是由于文件系统错误或病毒攻击引起的。在这种情况下&#xff0c;文件虽然从目录结构中消失&#xff0c;但它们仍然占用存储空间。本文将分析这一问题的原因&#xff0c;并探讨解决该问题的几种方法。 文件消失但占用内存的原…

C++ opencv RGB三通道提升亮度

#include <iostream> #include <iomanip> #include<opencv2//opencv.hpp> using namespace std; using namespace cv; //函数adjustBrightness用于图片增加亮度 void adjustBrightness(cv::Mat& image, int targetBrightness) { // 获取图像的通道数…

android11-开机自启脚本

1. 编写myshell脚本 diff --git a/device/rockchip/rk356x/ok3568_r/myshell.sh b/device/rockchip/rk356x/ok3568_r/myshell.sh new file mode 100644 index 0000000000..c78b6d93bd --- /dev/nullb/device/rockchip/rk356x/ok3568_r/myshell.sh-0,0 1,4 #!/vendor/bin/shec…

抢先看!Salesforce Spring ‘24中的10个亮点功能!

Spring 24来临在即&#xff0c;Preview Orgs已上线。在Spring 24中&#xff0c;将会为管理员、开发人员和顾问带来更多新功能。在这片云计算的海洋里&#xff0c;一些亮点功能总能在Salesforce生态系统中引起强烈反响。本篇文章为学习者们盘点了Spring 24中的10个亮点功能&…

Vue项目搭建过程

Vue项目搭建过程 1、安装NodeJs 1.1 下载安装包 在 http://nodejs.cn/download/ 上下载64位安装包&#xff0c;然后进行安装&#xff0c;和普通软件的安装一样。 C:\Users\Administrator>node -v v16.13.1C:\Users\Administrator>npm -v 8.5.51.2 安装cnpm # 安装cn…

centos 7.x 安装docker最新版

1、查看centos版本 [rootlocalhost ~]# cat /etc/centos-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]# cat /etc/os-release NAME"CentOS Linux" VERSION"7 (Core)" ID"centos" ID_LIKE"rhel fedora" VERSION_…

C语言,数组循环哪家好,指针or下标?

日常工作中&#xff0c;我们经常会用到循环遍历数组元素。不考虑只能使用某一特定方式的情况下&#xff0c;有人喜欢用数组下标遍历&#xff0c;有人则喜欢用指针遍历。那么这两者是否有性能差异呢&#xff1f; 我们先来看两个例子&#xff1a; 代码一 /* a.c */ #include &…