05-ES的RestClient(操作索引库)
RestClient(操作索引库)
ES官方提供了各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。官方文档地址:https://www.elastic.co/guide/en/elasticsearch/client/index.html
其中的Java Rest Client又包括两种:
- Java Low Level Rest Client
- Java High Level Rest Client
这里使用的是Java HighLevel Rest Client
数据结构
CREATE TABLE `tb_hotel` (`id` bigint(20) NOT NULL COMMENT '酒店id',`name` varchar(255) NOT NULL COMMENT '酒店名称;例:7天酒店',`address` varchar(255) NOT NULL COMMENT '酒店地址;例:航头路',`price` int(10) NOT NULL COMMENT '酒店价格;例:329',`score` int(2) NOT NULL COMMENT '酒店评分;例:45,就是4.5分',`brand` varchar(32) NOT NULL COMMENT '酒店品牌;例:如家',`city` varchar(32) NOT NULL COMMENT '所在城市;例:上海',`star_name` varchar(16) DEFAULT NULL COMMENT '酒店星级,从低到高分别是:1星到5星,1钻到5钻',`business` varchar(255) DEFAULT NULL COMMENT '商圈;例:虹桥',`latitude` varchar(32) NOT NULL COMMENT '纬度;例:31.2497',`longitude` varchar(32) NOT NULL COMMENT '经度;例:120.3925',`pic` varchar(255) DEFAULT NULL COMMENT '酒店图片;例:/img/1.jpg',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
创建索引库
ES中支持两种地理坐标
数据类型:
- geo_point:由纬度(latitude)和经度(longitude)确定的一个点。例如:“32.8752345, 120.2981576”
- geo_shape:有多个geo_point组成的复杂几何图形。例如一条直线,“LINESTRING (-77.03653 38.897676, -77.009051 38.889939)”
字段拷贝
可以使用copy_to属性将当前字段拷贝到指定字段,实现根据一个字段搜索多个字段的效果。
PUT /hotel
{"mappings": {"properties": {"id":{"type": "keyword"},"name":{"type": "text","analyzer": "ik_max_word","copy_to":"all"},"address":{"type": "keyword","index": false},"price":{"type": "integer"},"score":{"type": "integer"},"brand":{"type": "keyword","copy_to":"all"},"city":{"type": "keyword"},"starName":{"type": "keyword"},"business":{"type": "keyword","copy_to":"all"},"location":{"type": "geo_point"},"pic":{"type": "keyword","index": false},"all":{"type": "text","analyzer": "ik_max_word"}}}
}
几个特殊字段说明:
- location:地理坐标,里面包含精度、纬度
- all:一个组合字段,其目的是将多字段的值 利用copy_to合并,提供给用户搜索
初始化RestClient
在elasticsearch提供的API中,与elasticsearch一切交互都封装在一个名为RestHighLevelClient的类中,必须先完成这个对象的初始化,建立与elasticsearch的连接。
引入es的RestHighLevelClient依赖
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
覆盖默认的ES版本
因为SpringBoot默认的ES版本是7.6.2,所以我们需要覆盖默认的ES版本
<properties><java.version>1.8</java.version><elasticsearch.version>7.12.1</elasticsearch.version></properties>
初始化RestHighLevelClient
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://192.168.116.131:9200")
));
单元测试
创建一个测试类HotelIndexTest,然后将初始化的代码编写在@BeforeEach方法中:
public class HotelIndexTest {private RestHighLevelClient client;@BeforeEachvoid setUp() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://192.168.116.131:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();}
}
创建索引库
代码解读
代码分为三步:
- 1)创建Request对象。因为是创建索引库的操作,因此Request是CreateIndexRequest。
- 2)添加请求参数,其实就是DSL的JSON参数部分。因为json字符串很长,这里是定义了静态字符串常量MAPPING_TEMPLATE,让代码看起来更加优雅。
- 3)发送请求,client.indices()方法的返回值是IndicesClient类型,封装了所有与索引库操作有关的方法。
定义mapping映射的JSON字符串常量
package cn.bttc.hotel.constants;public class HotelIndexConstants {public static final String MAPPING_TEMPLATE = "{\n" +" \"mappings\": {\n" +" \"properties\": {\n" +" \"id\": {\n" +" \"type\": \"keyword\"\n" +" },\n" +" \"name\": {\n" +" \"type\": \"text\",\n" +" \"analyzer\": \"ik_max_word\",\n" +" \"copy_to\": \"all\"\n" +" },\n" +" \"address\": {\n" +" \"type\": \"keyword\",\n" +" \"index\": false\n" +" },\n" +" \"price\": {\n" +" \"type\": \"integer\"\n" +" },\n" +" \"score\": {\n" +" \"type\": \"integer\"\n" +" },\n" +" \"brand\": {\n" +" \"type\": \"keyword\",\n" +" \"copy_to\": \"all\"\n" +" },\n" +" \"city\": {\n" +" \"type\": \"keyword\"\n" +" },\n" +" \"starName\": {\n" +" \"type\": \"keyword\"\n" +" },\n" +" \"business\": {\n" +" \"type\": \"keyword\",\n" +" \"copy_to\": \"all\"\n" +" },\n" +" \"pic\": {\n" +" \"type\": \"keyword\",\n" +" \"index\": false\n" +" },\n" +" \"location\": {\n" +" \"type\": \"geo_point\"\n" +" },\n" +" \"all\": {\n" +" \"type\": \"text\",\n" +" \"analyzer\": \"ik_max_word\"\n" +" }\n" +" }\n" +" }\n" +"}";
}
创建索引
@Test
void createHotelIndex() throws IOException {// 1.创建Request对象CreateIndexRequest request = new CreateIndexRequest("hotel");// 2.准备请求的参数:DSL语句request.source(MAPPING_TEMPLATE, XContentType.JSON);// 3.发送请求client.indices().create(request, RequestOptions.DEFAULT);
}
删除索引库
@Test
void testDeleteHotelIndex() throws IOException {// 1.创建Request对象DeleteIndexRequest request = new DeleteIndexRequest("hotel");// 2.发送请求client.indices().delete(request, RequestOptions.DEFAULT);
}
判断索引库是否存在
@Test
void testExistsHotelIndex() throws IOException {// 1.创建Request对象GetIndexRequest request = new GetIndexRequest("hotel");// 2.发送请求boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);// 3.输出System.err.println(exists ? "索引库已经存在!" : "索引库不存在!");
}
05-ES的RestClient(操作索引库)相关推荐
- 操作索引库-mapping属性
索引库操作 索引库就类似数据库表,mapping映射就类似表的结构. 我们要向es中存储数据,必须先创建"库"和"表". mapping映射属性 mapping ...
- java pdf增删改查_如何利用Java代码操作索引库?
今天是刘小爱自学Java的第161天. 感谢你的观看,谢谢你. 学习计划安排如下: 学了几天的Elasticserch,但都是它本身的知识点,如何通过Java语言去操作它呢? 这就好比以前学数据库,在 ...
- 操作索引库-创建索引库
创建索引库和映射 基本语法: 请求方式:PUT 请求路径:/索引库名,可以自定义 请求参数:mapping映射 格式: PUT /索引库名称 {"mappings": {" ...
- ES的索引库(数据表)基础操作 —— 增删改查API版
索引库操作 索引库就类似数据库表,mapping映射就类似表的结构,对索引库的操作就类似于对数据库表的操作(为便于理解,以下描述有一些是用数据库表来描述的). 我们要向es中存储数据,必须先创建&qu ...
- 微服务03 分布式搜索引擎 elasticsearch ELK kibana RestAPI 索引库 DSL查询 RestClient 黑马旅游
分布式搜索引擎01 -- elasticsearch基础 0.学习目标 1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是 ...
- 【ElasticSearch】(四)—— RestClient操作ES
目录 编辑 一.RestClient操作索引 环境搭建 1.导入数据 2.导入项目 3.mapping映射分析 4.初始化RestClient 1)创建索引库 1.代码解读 2.完整示例 2)删除索 ...
- 分布式搜索引擎01-elasticsearch-介绍、倒排索引原理、概念(文档和字段,索引和映射)、安装、索引库crud、文档crud、RestAPI(java代码实现es的crud)
文章目录 分布式搜索引擎01 0.学习目标 1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 1.1.2.ELK技术栈 1.1.3.elasticse ...
- ElasticSearch入门简介、安装ES(安装Kibana和IK分词器)使用 Postman连接ES进行测、ESRestAPI(操作索引CRUD操作文档CRUD)、练习
要理解倒排索引 要能够使用DSL命令操作索引库 要能够使用DSL命令操作文档 要能够使用RestAPI操作索引库.文档 一.ES简介 理解倒排索引的概念和作用 理解es和MySql的区别和使用场景 1 ...
- 03-ES索引库操作
索引库操作 索引库就类似数据库表,mapping映射就类似表的结构. 我们要向es中存储数据,必须先创建"库"和"表". mapping映射属性 mapping ...
最新文章
- c语言简易绘图程序代码,简单的鼠标绘图程序
- linux rmp命令安装包在哪里_【MongoDB系列】Linux系统安装MongoDB
- 经典C语言程序100例之四九
- vs2012编译boost_1_54_0
- dwcs6连接不上access数据库_dw连接access数据库步骤
- 数字的补数——力扣476
- Service混合开启笔记(startService+bindService)
- 网易将在三亚设立海南总部 建设元宇宙产业基地
- java se面试题_Java SE 8面试问答(第2部分)
- FFmpeg基础库编程开发学习笔记——视频常见格式
- USB2.0 描述符
- 关于中值滤波算法,以及C语言实现
- mysql最左前缀原则学习笔记,in也可以走索引
- 互联网行业哪个职业比较有前途?
- 一句话拍大片,Gen-2震撼发布,科幻日系二次元统统拿捏住了!
- 站群代做关键词排名出技术
- HyperLynx(十一)BoardSim和PCB板级仿真分析(二)
- 关于PS课程中色彩调整部分的学习总结
- Roguelike+单机玩法游戏保护案例
- 仿微信、微博发朋友圈,文字+图片+视频
热门文章
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记 - passover【毕成功的博客】 - 51CTO技术博客...
- 虚拟机软件压缩包免费分享
- bzoj 4044 Virus synthesis - 回文自动机 - 动态规划
- 《脑电信号分析方法与脑机接口技术》笔记——第二章 EEG信号
- 服务器v3 v4性能,至强E5 v4性能表现测试_华为 FusionServer RH2288H V3_服务器x86服务器-中关村在线...
- 一颗红巨星的最后画面 发出朦胧萤光在星空中绽放
- 2012年的日历设计欣赏
- java图片覆盖_java中插入背景图片为什么总是覆盖掉按钮啊
- ll: command not found
- 我来学网络——数字信道中B信道、D信道