ElasticSearch5.6.2常用transport client Java API操作代码实例

文章目录

  • 版本及环境
  • 1 Maven依赖
  • 2 创建索引并插入单条数据
  • 3 打印所有创建的索引的名称
  • 4 查询索引中数据
  • 5 删除索引
  • 6 创建索引,并批量插入本地csv数据
  • 7 查看索引中的前10条数据

版本及环境

windows 11
ElasticSearch 5.6.2
Idea 2020

请注意,5.6.2是已经停止维护的版本,官方文档好多已经404,transport client客户端在6.x的版本中被官方弃用,但是现在仍然有老服务在用。最新的elasticsearch 7.x和8.x不再支持jdk1.8,但是我的服务器在2023年仍不能升级高版本java,所以只能学习老版本。

1 Maven依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>ES_Client</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.elasticsearch.client</groupId><artifactId>transport</artifactId><version>5.6.2</version></dependency><!--        <dependency>-->
<!--            <groupId>org.elasticsearch.client</groupId>-->
<!--            <artifactId>elasticsearch-rest-high-level-client</artifactId>-->
<!--            <version>5.6.2</version>-->
<!--        </dependency>--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-csv</artifactId><version>1.9.0</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.8.2</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.8.2</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>compile</scope></dependency></dependencies>
</project>

2 创建索引并插入单条数据

import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;import java.net.InetAddress;
import java.net.UnknownHostException;public class IndexCreated {public static void main(String[] args) {try {// 设置集群名称Settings settings = Settings.builder().put("cluster.name", "elasticsearch").build();// 创建 TransportClienttry (TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300))) {// 准备索引数据String jsonDocument = "{" +"\"user\":\"Marry Doe\"," +"\"postDate\":\"2023-12-01\"," +"\"message\":\"Hello, Index!\"" +"}";// 创建索引请求IndexResponse response = client.prepareIndex("twitter", "tweet", "2").setSource(jsonDocument).get();// 输出索引结果System.out.println("Index created: " + response.getId());}} catch (UnknownHostException e) {e.printStackTrace();}}
}

2 删除索引

import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;import java.net.InetAddress;
import java.net.UnknownHostException;public class DeleteIndexExample {public static void main(String[] args) {try (TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300))) {// 删除索引请求DeleteIndexRequest request = new DeleteIndexRequest("geo_index");// 执行删除索引请求DeleteIndexResponse response = client.admin().indices().delete(request).actionGet();// 打印删除索引响应System.out.println("Index deleted: " + response.isAcknowledged());} catch (UnknownHostException e) {e.printStackTrace();}}
}

3 打印所有创建的索引的名称

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.collect.ImmutableOpenMap;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.cluster.metadata.MappingMetaData;
import org.elasticsearch.action.admin.indices.get.GetIndexRequest;
import org.elasticsearch.action.admin.indices.get.GetIndexResponse;
import org.elasticsearch.action.admin.indices.mapping.get.GetMappingsRequest;
import org.elasticsearch.action.admin.indices.mapping.get.GetMappingsResponse;
import org.elasticsearch.transport.client.PreBuiltTransportClient;import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Map;public class ListAllIndicesExample {public static void main(String[] args) {try (TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300))) {// 获取所有索引请求GetIndexRequest request = new GetIndexRequest();// 执行获取所有索引请求GetIndexResponse response = client.admin().indices().getIndex(request).actionGet();// 获取所有索引的名称String[] indices = response.getIndices();// 打印所有索引的名称System.out.println("All Indices:");for (String index : indices) {System.out.println(index);// 获取索引的设置try {Settings indexSettings = client.admin().indices().prepareGetSettings(index).get().getIndexToSettings().get(index);System.out.println("Settings: " + indexSettings);} catch (Exception e) {if (e.getMessage().contains("Index not exist")) {System.out.println("Index not found: " + index);} else {e.printStackTrace();}}// 获取索引的映射try {GetMappingsResponse mappingsResponse = client.admin().indices().getMappings(new GetMappingsRequest().indices(index)).get();ImmutableOpenMap<String, MappingMetaData> indexMappings = mappingsResponse.mappings().get(index);System.out.println("Mappings: " + indexMappings);} catch (Exception e) {if (e.getMessage().contains("Index not exist")) {System.out.println("Index not found: " + index);} else {e.printStackTrace();}}System.out.println();}} catch (UnknownHostException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}
}

4 查询索引中数据

import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.transport.client.PreBuiltTransportClient;import java.net.InetAddress;
import java.net.UnknownHostException;public class QueryIndexExample {public static void main(String[] args) {try (TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300))) {// 准备查询请求SearchRequestBuilder searchRequest = client.prepareSearch("twitter").setQuery(QueryBuilders.matchAllQuery());// 执行查询请求SearchResponse searchResponse = searchRequest.get();// 处理查询结果System.out.println("Search results:");System.out.println(searchResponse.toString());} catch (UnknownHostException e) {e.printStackTrace();}}
}

5 删除索引

import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;import java.net.InetAddress;
import java.net.UnknownHostException;public class DeleteIndexExample {public static void main(String[] args) {try (TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300))) {// 删除索引请求DeleteIndexRequest request = new DeleteIndexRequest("geo_index");// 执行删除索引请求DeleteIndexResponse response = client.admin().indices().delete(request).actionGet();// 打印删除索引响应System.out.println("Index deleted: " + response.isAcknowledged());} catch (UnknownHostException e) {e.printStackTrace();}}
}

6 创建索引,并批量插入本地csv数据

将以下数据存入前文创建的索引geo_index,csv文件一共20万行。

以下为数据示例,第二列为地理数据。每行第二列的 loc 字段包含包围符 ",并且在字段中包含逗号 ,,我们需要更复杂的逻辑来解析 CSV 文件。以下使用 Apache Commons CSV 库来处理包含引号和逗号的 CSV 数据:

12345678901234567890,"23.123456,113.123456"
23456789012345678901,"24.234567,114.234567"
34567890123456789012,"25.345678,115.345678"
45678901234567890123,"26.456789,116.456789"

代码假设csv文件位置在"D:\geo_clean.csv"

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
import org.elasticsearch.transport.client.PreBuiltTransportClient;import java.io.FileReader;
import java.net.InetAddress;public class BulkInsertCsvToElasticsearch {public static void main(String[] args) {try (TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300))) {// 读取 CSV 文件String csvFile = "D:\\geo_clean.csv";CSVParser csvParser = CSVParser.parse(new FileReader(csvFile), CSVFormat.DEFAULT);// 创建批量请求构建器BulkRequestBuilder bulkRequest = client.prepareBulk();// 读取 CSV 文件的每一行for (CSVRecord csvRecord : csvParser) {// 获取 CSV 数据中的两列String did = csvRecord.get(0);String loc = csvRecord.get(1);// 创建索引请求IndexRequest indexRequest = client.prepareIndex("geo_index", "doc").setSource(XContentFactory.jsonBuilder().startObject().field("did", did).field("loc", loc).endObject()).request();// 添加索引请求到批量请求bulkRequest.add(indexRequest);}// 执行批量请求BulkResponse bulkResponse = bulkRequest.get();// 处理批量响应if (bulkResponse.hasFailures()) {System.out.println("Bulk request failed with failures: " + bulkResponse.buildFailureMessage());} else {System.out.println("Bulk request successfully processed.");}} catch (Exception e) {e.printStackTrace();}}
}

7 查看索引中的前10条数据

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.transport.client.PreBuiltTransportClient;import java.net.InetAddress;
import java.net.UnknownHostException;public class QueryGeoIndexExample {public static void main(String[] args) {try (TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300))) {// 构建搜索请求SearchRequest searchRequest = new SearchRequest("geo_index");// 构建搜索源SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.query(QueryBuilders.matchAllQuery());searchSourceBuilder.size(10); // 限制返回结果的数量// 设置搜索源searchRequest.source(searchSourceBuilder);// 执行搜索请求SearchResponse searchResponse = client.search(searchRequest).actionGet();// 打印搜索结果System.out.println("Search Results:");System.out.println(searchResponse.toString());} catch (UnknownHostException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}
}

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

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

相关文章

在Deepin系统上安装单机版PVE虚拟化系统

摘要&#xff1a;本文将介绍如何在Deepin系统上安装单机版PVE&#xff08;Proxmox Virtual Environment&#xff09;虚拟化系统。PVE是一款基于Debian的虚拟化平台&#xff0c;可以轻松管理和运行虚拟机。我们将通过以下步骤来安装PVE&#xff1a; 系统要求安装PVE 2.1 更新软…

单片机计数功能

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、计数器是什么&#xff1f;1.1 应用 二、计数器原理框图及对输入信号的要求2.1 原理框图2.2对输入信号的要求 三、使用步骤3.1 配置为计数模式3.2 装初值3.3…

0基础学习VR全景平台篇第129篇:认识单反相机和鱼眼镜头

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 一、相机 单反和微单 这里说的相机是指可更换镜头的单反/微单数码相机。那两者有何差异呢&#xff1f; 1&#xff09;取景结构差异 两者最直观的区别在于&#xff0c;微单相机…

html中RGB和RGBA颜色表示法

文章目录 RGB什么是RGBRGB颜色模式的取值范围RGB常用颜色对照表 RGBA什么是RGBARGBA颜色模式的取值范围 总结 RGB 什么是RGB RGB是一种颜色空间&#xff0c;其中R代表红色&#xff08;Red&#xff09;、G代表绿色&#xff08;Green&#xff09;、B代表蓝色&#xff08;Blue&a…

100GPTS计划-AI翻译TransLingoPro

地址 https://poe.com/TransLingoPro https://chat.openai.com/g/g-CfT8Otig6-translingo-pro 测试 输入: 我想吃中国菜。 预期翻译: I want to eat Chinese food. 输入: 请告诉我最近的医院在哪里。 预期翻译: Please tell me where the nearest hospital is. 输入: 明天…

Cookie和会话安全

Cookie时Web服务端发送给用户但浏览器的一小段数据&#xff0c;浏览器会存储这些数据并且在后续发往服务器的请求中带上它们。(是一种将数据存储在客户端的方式) cookie分类&#xff1a; 第一方Cookie&#xff1a; First-Party Cookie&#xff0c;是指用户当前访问的网站直接…

芯知识 | WT588F02B语音芯片IC支持用户自行更换语音内容的应用优势介绍

语音芯片&#xff0c;作为现代电子产品中的关键组件&#xff0c;为各类设备提供了丰富的人机交互方式。其中&#xff0c;声音播放提示IC的功能日益强大&#xff0c;尤其是当它们支持客户通过配套下载器实现在线更换芯片内部语音内容时&#xff0c;这种灵活性为产品设计带来了显…

Vue中表单数据和过滤器的简单使用

收集表单数据 v-model的三个修饰符: lazy:失去焦点在收集数据 number: 输入字符串转为有效数字 trim:输入首尾空格过滤 < input type"text" v-model"person.account">则v-model收集的是value值&#xff0c;用户输入的就是value值 < input type…

分布式理论 | RPC | Spring Boot 整合 Dubbo + ZooKeeper

一、基础 分布式理论 什么是分布式系统&#xff1f; 在《分布式系统原理与范型》一书中有如下定义&#xff1a;“分布式系统是若干独立计算机的集合&#xff0c;这些计算机对于用户来说就像单个相关系统”&#xff1b; 分布式系统是由一组通过网络进行通信、为了完成共同的…

Django 构建动态前端页面详解

概要 Django 是一个强大的 Python Web 框架&#xff0c;广泛用于后端开发。然而&#xff0c;它也支持直接使用 HTML, CSS, 和 JavaScript 来构建动态的前端界面。本文将详细介绍如何在 Django 项目中使用这些技术&#xff0c;包括设置静态文件、编写 HTML 模板以及集成 JavaSc…

教育机构小程序管理系统的全方位优化

随着互联网的快速发展&#xff0c;线上教育也日益受到人们的关注和欢迎。为了满足广大学生和家长的需求&#xff0c;教育机构纷纷开发出自己的小程序管理系统。本文将详细介绍如何使用乔拓云平台&#xff0c;一键开发出自己的教育机构小程序管理系统。 1.进入乔拓云后台 首先&…

【难点】【LRU】146.LRU缓存

题目 法1&#xff1a;基于Java的LinkedHashMap 必须掌握法1。参考链接 关于LinkedHashMap的介绍 class LRUCache {int cap;LinkedHashMap<Integer, Integer> cache new LinkedHashMap<>();public LRUCache(int capacity) { this.cap capacity;}public int get…

Linux性能优化常做的一些事情

Linux性能优化是一个广泛的主题&#xff0c;涉及多个方面。以下是一些常见的Linux性能优化建议&#xff1a; 硬件和系统配置&#xff1a; 使用SSD替代HDD。确保系统有足够的RAM。使用多核CPU。配置合适的网络硬件和带宽。 磁盘I/O性能&#xff1a; 使用RAID来提高I/O性能。使用…

回归烟火气,中国烹饪正在进行一场重构

当前的中国厨电行业&#xff0c;急需一场前所未有的变革。 近几年&#xff0c;厨电行业已告别以往的跨越式增长&#xff0c;多数厨电企业陷入迷茫&#xff0c;如何才能打破增长瓶颈&#xff1f;《一点财经》认为&#xff0c;只有积极适应新形势&#xff0c;探索新的经营方式&a…

考拉兹猜想

考拉兹猜想&#xff08;Collatz conjecture&#xff09;又称奇偶归一猜想&#xff0c;是指对于每一个正整数&#xff0c;如果它是奇数&#xff0c;则对它乘3再加1&#xff0c;如果它是偶数&#xff0c;则对它除以2。如此循环&#xff0c;最终都能得到1。 编写一个程序&#xff…

【web安全】支付篡改

前言 菜某的总结&#xff0c;如有错误和补充欢迎评论指正。 内容仅供学习使用&#xff0c;切勿用于非法用途。 支付篡改的存在位置与影响 首先他的危害不言而喻&#xff0c;几乎任何一个拿出来都能给企业带来巨大的损失。 他出现的地方也是十分的广泛&#xff0c;从某种意…

复杂背景下的低空无人机检测与跟踪算法

doi&#xff1a;10.11884/HPLPB202335.230026 大视场中的目标丢失后需要再次检测&#xff0c;但是大视场的检测比较耗时。但是根据实验发现丢失目标通常发生在无人机运动区域的320x320范围内&#xff0c;所以设计辅助网络&#xff0c;当目标丢失后&#xff0c;以320x320区域图像…

Transformer Decoder的输入

大部分引用参考了既安的https://www.zhihu.com/question/337886108/answer/893002189这篇文章&#xff0c;个人认为写的很清晰&#xff0c;此外补充了一些自己的笔记。 弄清楚Decoder的输入输出&#xff0c;关键在于图示三个箭头的位置&#xff1a; 以翻译为例&#xff1a; 输…

七轴开源协作机械臂myArm视觉跟踪技术!

引言 ArUco标记是一种基于二维码的标记&#xff0c;可以被用于高效的场景识别和位置跟踪。这些标记的简单性和高效性使其成为机器视觉领域的理想选择&#xff0c;特别是在需要实时和高精度跟踪的场景中。结合机器学习和先进的图像处理技术&#xff0c;使用ArUco标记的机械臂系统…

20231218在Ubuntu18.04下以EXT4格式化HDD

20231218在Ubuntu18.04下以EXT4格式化HDD 2023/12/18 17:24 缘起&#xff1a; 编译一个Android10大概要200GB&#xff0c;编译10个Android10的SDK&#xff0c;3TB的HDD机械硬盘就估计会被填满了&#xff01; 如果使用rm -rf *这个命令将SDK一个一个逐个地删除&#xff0c;估计2…