人力资源公司起名大全册子,网络优化工程师能干一辈子吗,游戏平台管理系统,wordpress用什么php版本好1 RestHighLevelClient介绍
默认情况下#xff0c;ElasticSearch使用两个端口来监听外部TCP流量。
9200端口#xff1a;用于所有通过HTTP协议进行的API调用。包括搜索、聚合、监控、以及其他任何使用HTTP协议的请求。所有的客户端库都会使用该端口与ElasticSearch进行交互。…1 RestHighLevelClient介绍
默认情况下ElasticSearch使用两个端口来监听外部TCP流量。
9200端口用于所有通过HTTP协议进行的API调用。包括搜索、聚合、监控、以及其他任何使用HTTP协议的请求。所有的客户端库都会使用该端口与ElasticSearch进行交互。9300端口是一个自定义的二进制协议用于集群中各节点之间的通信。用于诸如集群变更、主节点选举、节点加入/离开、分片分配等事项。
RestHighLevelClient是ES的Java客户端它是通过HTTP与ES集群进行通信。 2 引入ES依赖
!--引入es-high-level-client相关依赖 start--
dependencygroupIdorg.elasticsearch/groupIdartifactIdelasticsearch/artifactIdversion7.10.0/version
/dependencydependencygroupIdorg.elasticsearch.client/groupIdartifactIdelasticsearch-rest-client/artifactIdversion7.10.0/version
/dependencydependencygroupIdorg.elasticsearch.client/groupIdartifactIdelasticsearch-rest-high-level-client/artifactIdversion7.10.0/version
/dependency
!--引入es-high-level-client相关依赖 end--3 使用
3.1 es的配置
# es配置
# es用户名
elasticsearch.userNameelastic
# es密码
elasticsearch.passwordelastic
# es host ip 地址(集群)多个以,间隔
elasticsearch.hosts127.0.0.1:9200
# es 请求方式
elasticsearch.schemehttp
# es 连接超时时间ms
elasticsearch.connectTimeOut1000
# es socket 连接超时时间ms
elasticsearch.socketTimeOut30000
# es 请求超时时间ms
elasticsearch.connectionRequestTimeOut500
# es 最大连接数
elasticsearch.maxConnectNum100
# es 每个路由的最大连接数
elasticsearch.maxConnectNumPerRoute100
3.2 es客户端配置类
/*** restHighLevelClient 客户端配置类**/
Slf4j
Data
Configuration
ConfigurationProperties(prefix elasticsearch)
public class ElasticsearchConfig {/*** es host ip 地址集群*/private String hosts;/*** es用户名*/private String userName;/*** es密码*/private String password;/*** es 请求方式*/private String scheme;/*** es 连接超时时间*/private int connectTimeOut;/*** es socket 连接超时时间*/private int socketTimeOut;/*** es 请求超时时间*/private int connectionRequestTimeOut;/*** es 最大连接数*/private int maxConnectNum;/*** es 每个路由的最大连接数*/private int maxConnectNumPerRoute;/*** 如果Bean没有指定bean的名称那么方法名就是bean的名称*/Bean(name restHighLevelClient)public RestHighLevelClient restHighLevelClient() {// 构建连接对象RestClientBuilder builder RestClient.builder(getEsHost());// 连接延时配置builder.setRequestConfigCallback(requestConfigBuilder - {requestConfigBuilder.setConnectTimeout(connectTimeOut);requestConfigBuilder.setSocketTimeout(socketTimeOut);requestConfigBuilder.setConnectionRequestTimeout(connectionRequestTimeOut);return requestConfigBuilder;});// 连接数配置builder.setHttpClientConfigCallback(httpClientBuilder - {httpClientBuilder.setMaxConnTotal(maxConnectNum);httpClientBuilder.setMaxConnPerRoute(maxConnectNumPerRoute);httpClientBuilder.setDefaultCredentialsProvider(getCredentialsProvider());return httpClientBuilder;});return new RestHighLevelClient(builder);}private HttpHost[] getEsHost() {// 拆分地址es为多节点时不同host以逗号间隔ListHttpHost hostLists new ArrayList();String[] hostList hosts.split(,);for (String addr : hostList) {String host addr.split(:)[0];String port addr.split(:)[1];hostLists.add(new HttpHost(host, Integer.parseInt(port), scheme));}// 转换成 HttpHost 数组return hostLists.toArray(new HttpHost[]{});}private CredentialsProvider getCredentialsProvider() {// 设置用户名、密码CredentialsProvider credentialsProvider new BasicCredentialsProvider();credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));return credentialsProvider;}
}
3.3 es的使用
3.3.1 创建es索引
3.3.1.1 创建es索引的工具类
创建es索引的工具类如下所示。
/*** 操作ES索引**/
Slf4j
Service
public class EsIndexOperation {Resourceprivate RestHighLevelClient restHighLevelClient;private final RequestOptions options RequestOptions.DEFAULT;/*** 判断索引是否存在*/public boolean checkIndex(String index) {try {return restHighLevelClient.indices().exists(new GetIndexRequest(index), options);} catch (Exception e) {log.error(EsIndexOperation checkIndex error., e);}return Boolean.FALSE;}/*** 创建索引** param indexName es索引名* param esSettingFilePath es索引的alias、settings和mapping的配置文件*/public boolean createIndex(String indexName, String esSettingFilePath) {String aliases null;String mappings null;String settings null;if (StringUtils.isNotBlank(esSettingFilePath)) {try {String fileContent FileUtils.readFileContent(esSettingFilePath);if (StringUtils.isNotBlank(fileContent)) {JSONObject jsonObject JSON.parseObject(fileContent);aliases jsonObject.getString(aliases);mappings jsonObject.getString(mappings);settings jsonObject.getString(settings);}} catch (Exception e) {log.error(createIndex error., e);return false;}}if (checkIndex(indexName)) {log.error(createIndex indexName:[{}]已存在, indexName);return false;}CreateIndexRequest request new CreateIndexRequest(indexName);if ((StringUtils.isNotBlank(aliases))) {request.aliases(aliases, XContentType.JSON);}if (StringUtils.isNotBlank(mappings)) {request.mapping(mappings, XContentType.JSON);}if (StringUtils.isNotBlank(settings)) {request.settings(settings, XContentType.JSON);}try {this.restHighLevelClient.indices().create(request, options);return true;} catch (IOException e) {log.error(EsIndexOperation createIndex error., e);return false;}}/*** 删除索引*/public boolean deleteIndex(String indexName) {try {if (checkIndex(indexName)) {DeleteIndexRequest request new DeleteIndexRequest(indexName);AcknowledgedResponse response restHighLevelClient.indices().delete(request, options);return response.isAcknowledged();}} catch (Exception e) {log.error(EsIndexOperation deleteIndex error., e);}return Boolean.FALSE;}
}3.3.1.2 读取文件的工具类
/*** 文件操作类*/
Slf4j
public class FileUtils {/*** 读取项目resources文件夹下的文件** param filePath 文件路径* return 文件内容*/public static String readFileContent(String filePath) {try {BufferedReader reader new BufferedReader(new FileReader(filePath));String line;StringBuilder stringBuilder new StringBuilder();while ((line reader.readLine()) ! null) {stringBuilder.append(line);}reader.close();return stringBuilder.toString();} catch (IOException e) {log.error(readFileContent error., e);}return null;}public static void main(String[] args) {String filePath src/main/resources/es/mappings_test20231216.txt;String fileContent readFileContent(filePath);}}3.3.1.3 测试创建es索引
1在“resources”文件夹下创建es索引的配置文件 配置文件内容如下所示。
{aliases: {test: {}},mappings: {properties: {name: {type: text,fields: {keyword: {type: keyword,ignore_above: 256}}},address: {type: text,fields: {keyword: {type: keyword,ignore_above: 256}}}}},settings: {index: {number_of_shards: 1,number_of_replicas: 1}}
}
2读取es索引的配置文件创建es索引 Testpublic void createIndex() {String indexName test_1216;String filePath src/main/resources/es/mappings_test20231216.txt;boolean b esIndexOperation.createIndex(indexName, filePath);Assert.assertTrue(b);}
3查看创建结果
通过命令 GET /test 查看es索引创建结果结果如下所示。
{test_1216 : {aliases : {test : { }},mappings : {properties : {address : {type : text,fields : {keyword : {type : keyword,ignore_above : 256}}},name : {type : text,fields : {keyword : {type : keyword,ignore_above : 256}}}}},settings : {index : {routing : {allocation : {include : {_tier_preference : data_content}}},number_of_shards : 1,provided_name : test_1216,creation_date : 1702723364945,number_of_replicas : 1,uuid : RCAhqjPZSG-n4fse3cot4A,version : {created : 7100099}}}}
}4 参考文献
1elasticsearch学习七es客户端RestHighLevelClient_炎升的博客
2中间件ElasticSearch组件RestHighLevelClient用法详解
3java api 实现es中的索引管理_createindexrequest