在生产环境中部署Elasticsearch:最佳实践和故障排除技巧——聚合与搜索(三)

#在生产环境中部署Elasticsearch:最佳实践和故障排除技巧——聚合与搜索(三)

前言

在这里插入图片描述 请添加图片描述
文章目录
  • 前言- 聚合和分析-
    • 执行聚合操作-
      • 1. 使用Java API执行聚合操作- 2. 使用CURL命令执行聚合操作- 1. 使用Java API执行度量操作- 2. 使用CURL命令执行度量操作- 使用缓存- 调整分片大小和数量- 使用搜索建议- 结论- 节点发现- 负载均衡- 故障转移- 结论- 访问控制- 加密- 身份验证- 结论- REST API- 客户端库- 结论
在这里插入图片描述

聚合和分析

在Elasticsearch中执行聚合和度量操作可以帮助我们对数据进行更深入的分析。本文将介绍如何使用聚合和度量来执行复杂的数据分析操作,例如计数、平均值、百分位数和分组等。

执行聚合操作

1. 使用Java API执行聚合操作

可以使用Java API执行各种聚合操作。以下是使用RestHighLevelClient对象执行名为my_index的索引中的terms聚合操作的代码示例:

SearchRequest request = new SearchRequest("my_index");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
TermsAggregationBuilder aggregation =AggregationBuilders.terms("by_age").field("age");
sourceBuilder.aggregation(aggregation);
request.source(sourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);

以上代码使用SearchRequest对象和SearchSourceBuilder对象执行terms聚合操作,并按年龄字段分组。

2. 使用CURL命令执行聚合操作

也可以使用CURL命令执行各种聚合操作。以下是使用名为my_index的索引中的terms聚合操作检索所有文档的示例:

curl -XGET 'localhost:9200/my_index/_search?pretty' -H 'Content-Type: application/json' -d'
{"aggs" : {"by_age" : {"terms" : { "field" : "age" }}}
}
'

执行度量操作

1. 使用Java API执行度量操作

可以使用Java API执行各种度量操作。以下是使用RestHighLevelClient对象执行名为my_index的索引中的avg度量操作的代码示例:

SearchRequest request = new SearchRequest("my_index");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
AvgAggregationBuilder aggregation =AggregationBuilders.avg("avg_age").field("age");
sourceBuilder.aggregation(aggregation);
request.source(sourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);

以上代码使用SearchRequest对象和SearchSourceBuilder对象执行avg度量操作,并返回年龄字段的平均值。

2. 使用CURL命令执行度量操作

也可以使用CURL命令执行各种度量操作。以下是使用名为my_index的索引中的avg度量操作检索所有文档的示例:

curl -XGET 'localhost:9200/my_index/_search?pretty' -H 'Content-Type: application/json' -d'
{"aggs" : {"avg_age" : {"avg" : { "field" : "age" }}}
}
'

结论

本文介绍了如何使用聚合和度量来执行复杂的数据分析操作,例如计数、平均值、百分位数和分组等。使用Java API或CURL命令都可以对Elasticsearch索引中的数据进行聚合和度量操作,以便更好地理解和分析数据。在实际应用中,需要根据具体需求选择合适的聚合和度量操作来使用。

搜索性能优化

优化Elasticsearch的搜索性能是应用程序中非常重要的一部分。本文将介绍如何使用缓存、调整分片大小和数量,以及使用搜索建议等方式来优化Elasticsearch的搜索性能。

使用缓存

Elasticsearch中有两种类型的缓存:查询缓存和过滤器缓存。查询缓存为相同的查询结果提供快速的响应,而过滤器缓存则会缓存过滤器结果,以便在后续搜索中快速使用。以下是使用Java API启用过滤器缓存的代码示例:

SearchRequest request = new SearchRequest("my_index");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.termQuery("age", 30));
sourceBuilder.postFilter(QueryBuilders.termQuery("city", "New York"));
sourceBuilder.size(0);
sourceBuilder.aggregation(AggregationBuilders.avg("avg_age").field("age"));
sourceBuilder.aggregation(AggregationBuilders.terms("by_city").field("city"));
sourceBuilder.profile(true);
sourceBuilder.cache(true);
request.source(sourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);

以上代码使用SearchSourceBuilder对象启用了过滤器缓存。

调整分片大小和数量

分片是Elasticsearch中数据的基本单元,并且将数据划分为多个分片可以使Elasticsearch更好地处理大型数据集。但是,如果分片过大或过小,都会影响搜索性能。以下是使用Java API设置索引分片数和备份数的代码示例:

CreateIndexRequest request = new CreateIndexRequest("my_index");
request.settings(Settings.builder().put("index.number_of_shards", 5).put("index.number_of_replicas", 1));

以上代码使用CreateIndexRequest对象设置名为my_index的索引的分片数为5,备份数为1。

使用搜索建议

搜索建议是Elasticsearch中一种重要的搜索优化技术。它可以在用户输入搜索查询时提供自动完成、拼写检查和相关性建议等功能。以下是使用Java API添加基于文本的完整推荐搜索建议的代码示例:

SearchRequest request = new SearchRequest("my_index");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
SuggestionBuilder termSuggestionBuilder =SuggestBuilders.termSuggestion("name").text("jonh");
SuggestBuilder suggestBuilder = new SuggestBuilder();
suggestBuilder.addSuggestion("suggest_name", termSuggestionBuilder);
sourceBuilder.suggest(suggestBuilder);
request.source(sourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);

以上代码使用SearchSourceBuilder对象添加了一个基于文本的完整推荐搜索建议。

结论

本文介绍了如何使用缓存、调整分片大小和数量以及使用搜索建议等方法来优化Elasticsearch的搜索性能。使用这些技术可以提高搜索响应速度,并增强用户体验。在实际应用中,需要根据具体的搜索需求来选择合适的优化方式。

集群管理

配置和管理Elasticsearch集群是使大规模Elasticsearch应用程序成功运行的关键。本文将介绍如何进行节点发现、负载均衡和故障转移等操作来配置和管理Elasticsearch集群。

节点发现

节点发现是Elasticsearch中一个重要的概念,它允许新节点加入到已有的Elasticsearch集群中。以下是使用Java API启用节点发现功能的代码示例:

Settings settings = Settings.builder().put("discovery.seed_hosts", "host1:9300,host2:9300").put("cluster.name", "my_cluster_name").build();
TransportClient client = new PreBuiltTransportClient(settings);

以上代码使用Settings对象启用了节点发现功能,并将节点列表设置为host1和host2。

负载均衡

负载均衡是在分布式系统中非常重要的一部分,它可以确保系统中所有节点都平均地承载负载。以下是使用Java API添加负载均衡功能的代码示例:

RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")).setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.addInterceptorLast(new ElasticsearchInterceptor())));

以上代码使用RestClient对象添加了一个名为ElasticsearchInterceptor的拦截器来实现负载均衡。

故障转移

故障转移是在Elasticsearch集群中必须考虑的问题。当某个节点发生故障时,需要立即采取行动将其替换为另一个节点。以下是使用Java API添加自动故障转移功能的代码示例:

Settings settings = Settings.builder().put("cluster.routing.allocation.enable", "all").put("cluster.routing.allocation.node_initial_primaries_recoveries", 20).put("cluster.routing.allocation.node_concurrent_recoveries", 2).put("indices.recovery.max_bytes_per_sec", "50mb").build();

以上代码启用了自动故障转移功能,并设置了一些相关参数,例如索引恢复速度和并发恢复数等。

结论

本文介绍了如何进行节点发现、负载均衡和故障转移等操作来配置和管理Elasticsearch集群。这些技术可以使Elasticsearch应用程序更稳定、可靠和高效。在实际应用中,需要选择合适的配置选项和管理方案来满足具体需求。

安全性和访问控制

保护Elasticsearch集群和数据是任何生产环境下应用程序的必要条件之一。本文将介绍如何使用访问控制、加密和身份验证等技术来提高Elasticsearch的安全性。

访问控制

访问控制是Elasticsearch中一个非常重要的概念,它可以确保只有经过授权的用户才能够访问Elasticsearch集群和数据。以下是使用Java API添加基于用户名/密码的访问控制的代码示例:

RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")).setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(new BasicCredentialsProvider())).setRequestConfigCallback(requestConfigBuilder -> requestConfigBuilder.setConnectTimeout(5000).setSocketTimeout(60000)));

以上代码使用RestClient对象添加了一个BasicCredentialsProvider对象作为默认凭据提供者,以实现基于用户名/密码的访问控制。

加密

加密可以确保在Elasticsearch集群和数据传输过程中的安全性。以下是使用Java API启用HTTPS加密的代码示例:

RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "https")));

以上代码使用RestClient对象启用了HTTPS加密协议,以确保数据传输的安全性。

身份验证

身份验证是Elasticsearch中一个非常重要的概念,它可以确保只有经过授权的用户才能够访问和修改Elasticsearch集群和数据。以下是使用Java API添加基于X-Pack的身份验证功能的代码示例:

RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "https")).setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(new BasicCredentialsProvider())).setRequestConfigCallback(requestConfigBuilder -> requestConfigBuilder.setConnectTimeout(5000).setSocketTimeout(60000)).setXpackBuilder(XPackClientBuilder.builder("username", "password")));

以上代码使用RestClient对象启用了基于X-Pack的身份验证功能,并将用户名和密码设置为"username"和"password"。

结论

本文介绍了如何使用访问控制、加密和身份验证等技术来提高Elasticsearch的安全性。这些技术可以确保Elasticsearch集群和数据的安全性,并保护其免受未经授权的访问和攻击。在实际应用中,需要根据具体需求来选择合适的安全措施。

应用程序集成

将Elasticsearch集成到应用程序中是实现数据搜索和分析的关键。本文将介绍如何使用REST API和各种客户端库来将Elasticsearch集成到应用程序中。

REST API

Elasticsearch提供了REST API,以便应用程序可以通过HTTP协议与Elasticsearch进行交互。以下是使用Java代码向Elasticsearch索引添加文档的示例:

RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
IndexRequest request = new IndexRequest("my_index");
request.id("1");
String jsonString = "{" +"\"name\":\"John\"," +"\"age\":30," +"\"city\":\"New York\"" +"}";
request.source(jsonString, XContentType.JSON);
IndexResponse response = client.index(request, RequestOptions.DEFAULT);

以上代码使用RestHighLevelClient对象向名为"my_index"的索引添加ID为1的文档。

客户端库

Elasticsearch也提供了各种语言的客户端库,以便应用程序可以更容易地与Elasticsearch交互。以下是使用Java API添加Elasticsearch客户端库的代码示例:

<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.14.0</version>
</dependency>

以上代码将elasticsearch-rest-high-level-client客户端库添加到Java项目中。

以下是使用Java代码向Elasticsearch索引添加文档的客户端库示例:

RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));
IndexRequest request = new IndexRequest("my_index");
request.id("1");
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("name", "John");
jsonMap.put("age", 30);
jsonMap.put("city", "New York");
request.source(jsonMap);
IndexResponse response = client.index(request, RequestOptions.DEFAULT);

以上代码使用RestHighLevelClient对象和Elasticsearch客户端库向名为"my_index"的索引添加ID为1的文档。

结论

本文介绍了如何使用REST API和各种语言的客户端库将Elasticsearch集成到应用程序中。这些方法可以使应用程序更有效地与Elasticsearch交互,并实现数据搜索和分析等功能。在实际应用中,需要根据具体需求来选择合适的集成方式。

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

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

相关文章

谷粒商城实战笔记-34-前端基础-ES6-promise异步编排

文章目录 一,回调地狱(Callback Hell)二,实战Promise1,场景说明2,回调地狱-传统实现3,使用Promise重构3.1 用Promise实现上述需求3.2 进一步重构 在ES6中,Promise是一个用于异步编程…

网络安全-内网安全加固方案

内网接入限制(MAC地址白名单) 只允许信任设备接入内网,且每次自动获取的IP地址不变(后续就可根据IP地址控制访问权限) 开启DHCP服务根据MAC地址静态分配固定IP地址 只允许可信的DHCP服务器分配IP地址(防止私建DHCP服务器) DHCP Snooping 信…

在Vue中,子组件向父组件传递数据

在Vue中,子组件向父组件传递数据通常通过两种方式实现:事件和回调函数。这两种方式允许子组件与其父组件进行通信,传递数据或触发特定的行为。 1. 通过事件传递数据 子组件可以通过触发自定义事件,并将数据作为事件的参数来向父组…

电脑案件冲突问题

一.故障展示 有一天我打开了电脑,发现3这个数字按键一直在输入,拔了外界的键盘,他这个按键还是会冲突 ,就如同上面的图一样 ,可能是电脑内部的键位进了灰卡住了什么东西导致的,于是我果断就电脑上的按键给扣下来了,扣的时候不知道里面的结构非常的谨慎,所以没导致里面的结构被损…

C#开发:Git的安装和使用

一、安装git 二、如何克隆代码? 1.找到某个本地目录,右键-gitbash 2. 输入以下代码(红色是地址,在gitlab获取或联系管理员获取,下图为复制地址): git clone http://xxxxxxxxx.git 输入帐号和令…

【公益案例展】中国电信安全大模型——锻造安全行业能量转化的高性能引擎...

‍ 电信安全公益案例 本项目案例由电信安全投递并参与数据猿与上海大数据联盟联合推出的 #榜样的力量# 《2024中国数智产业最具社会责任感企业》榜单/奖项评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 以GPT系列为代表的大模型技术,展现了人工智能技术与应…

深度学习中的FLOPs补充

学习了博主的介绍(深度学习中的FLOPs介绍及计算(注意区分FLOPS)-CSDN博客)后,对我不理解的内容做了一点补充。 链接放到下边啦 https://blog.csdn.net/qq_41834400/article/details/120283103 FLOPs:注意s小写,是floa…

.Net Core 微服务之Consul(二)-集群搭建

引言: 集合上一期.Net Core 微服务之Consul(一)(.Net Core 微服务之Consul(一)-CSDN博客) 。 目录 一、 Consul集群搭建 1. 高可用 1.1 高可用性概念 1.2 高可用集群的基本原理 1.3 高可用集群的架构设计 1.3.1 主从复制架构 1.3.2 共享存储架构 1.3.3 负载均衡…

小程序字体图标使用iconfont 阿里巴巴矢量图

打开链接 iconfont官网进入 素材库-官方图标库中 挑选 适合的 字体图标 放到购物车点击 导航栏 中 购物车 图标把选中的 图标 添加至项目 然后在我的项目中 找到 项目 点击 【查看在线链接】 点击 图中 【暂无代码,点此生成】 生成 css 文件链接点击 css 打开 css 文…

OBD诊断(ISO15031) 06服务

文章目录 功能简介ISO 9141-2、ISO 14230-4和SAE J1850的诊断服务定义1、请求特定监控系统的车载监控测试结果请求消息定义(读取支持的TID)2、请求特定监控系统响应消息定义的车载监控测试结果(报告支持的TID)3、请求特定监控系统…

每天一个数据分析题(四百二十七)- 方差分析

下面是一个方差分析表: 表中A,B,C,D,E五个单元格内的数据分别是( )。 A. 40,5,35,60,1.71 B. 40,5,35,60&a…

The Web3 社区 Web3 产品经理课程

概述 / 深耕区块链行业 11 年,和很多产品经理都打过交道;遇到过优秀的产品经理,也遇到过比较拉垮的产品经理。多年工作中,曾在某些团队,承载技术兼产品经理的角色;也参与过很多 Web3 外包项目,包…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第二十九章 NFS服务器的搭建和使用

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

GEO的表达矩阵的探针ID转换成基因名称教程

GEO的表达矩阵的探针ID转换成基因名称教程 前情回顾 根据GSE id自动下载处理GEO数据(必须要运行的模块) 该模块的运行窗口截图 该模块的教程 知乎地址:根据GEO的GSE数据集编号自动下载和处理GEO数据教程: https://zhuanlan.zhihu.com/p/708053447 该根据GSE id…

大模型最新黑书:基于GPT-3、ChatGPT、GPT-4等Transformer架构的自然语言处理 PDF

今天给大家推荐一本丹尼斯罗斯曼(Denis Rothman)编写的关于大语言模型&#xff08;LLM&#xff09;权威教程<<大模型应用解决方案> 基于GPT-3、ChatGPT、GPT-4等Transformer架构的自然语言处理>&#xff01;Google工程总监Antonio Gulli作序&#xff0c;这含金量不…

观察者模式的实现

引言&#xff1a;观察者模式——程序中的“通信兵” 在现代战争中&#xff0c;通信是胜利的关键。信息力以网络、数据、算法、算力等为底层支撑&#xff0c;在现代战争中不断推动感知、决策、指控等各环节产生量变与质变。在软件架构中&#xff0c;观察者模式扮演着类似的角色…

最小二乘算法的解

最小二乘法&#xff08;Least Squares&#xff09;是一种用于寻找线性回归模型的最佳拟合直线的标准方法。它通过最小化数据点与拟合直线之间的平方差来找到最佳拟合的线性模型。 线性回归模型 假设我们有一组数据点 (xi,yi)&#xff0c;线性回归模型的目标是找到系数 w 和截…

css预编译器--sass

Sass Sass 提供了 变量&#xff08;variables&#xff09;、嵌套规则&#xff08;nested rules&#xff09;、 混合&#xff08;mixins&#xff09;、 函数&#xff08;functions&#xff09;&#xff0c;目前我使用最多的还是变量和嵌套规则&#xff0c;貌似目前css也支持嵌套…

2024年高职物联网实验室建设及物联网实训平台整体解决方案

随着物联网技术的蓬勃发展&#xff0c;其在各行业的应用日益广泛&#xff0c;对具备物联网专业技能的高素质人才需求也急剧增加。为了满足这一市场需求&#xff0c;高职院校作为技能型人才培养的重要阵地&#xff0c;亟需加强物联网专业的建设。本文旨在提出《2024年高职物联网…

一个开源完全免费的无损视频或音频的剪切/裁剪/分割/截取和视频合并工具

大家好&#xff0c;今天给大家分享一款致力于成为顶尖跨平台FFmpeg图形用户界面应用的软件工具LosslessCut。 LosslessCut是一款致力于成为顶尖跨平台FFmpeg图形用户界面应用的软件工具&#xff0c;专为实现对视频、音频、字幕以及其他相关媒体资产的超高速无损编辑而精心打造。…