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(操作索引库)相关推荐

  1. 操作索引库-mapping属性

    索引库操作 索引库就类似数据库表,mapping映射就类似表的结构. 我们要向es中存储数据,必须先创建"库"和"表". mapping映射属性 mapping ...

  2. java pdf增删改查_如何利用Java代码操作索引库?

    今天是刘小爱自学Java的第161天. 感谢你的观看,谢谢你. 学习计划安排如下: 学了几天的Elasticserch,但都是它本身的知识点,如何通过Java语言去操作它呢? 这就好比以前学数据库,在 ...

  3. 操作索引库-创建索引库

    创建索引库和映射 基本语法: 请求方式:PUT 请求路径:/索引库名,可以自定义 请求参数:mapping映射 格式: PUT /索引库名称 {"mappings": {" ...

  4. ES的索引库(数据表)基础操作 —— 增删改查API版

    索引库操作 索引库就类似数据库表,mapping映射就类似表的结构,对索引库的操作就类似于对数据库表的操作(为便于理解,以下描述有一些是用数据库表来描述的). 我们要向es中存储数据,必须先创建&qu ...

  5. 微服务03 分布式搜索引擎 elasticsearch ELK kibana RestAPI 索引库 DSL查询 RestClient 黑马旅游

    分布式搜索引擎01 -- elasticsearch基础 0.学习目标 1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是 ...

  6. 【ElasticSearch】(四)—— RestClient操作ES

    目录 ​编辑 一.RestClient操作索引 环境搭建 1.导入数据 2.导入项目 3.mapping映射分析 4.初始化RestClient 1)创建索引库 1.代码解读 2.完整示例 2)删除索 ...

  7. 分布式搜索引擎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 ...

  8. ElasticSearch入门简介、安装ES(安装Kibana和IK分词器)使用 Postman连接ES进行测、ESRestAPI(操作索引CRUD操作文档CRUD)、练习

    要理解倒排索引 要能够使用DSL命令操作索引库 要能够使用DSL命令操作文档 要能够使用RestAPI操作索引库.文档 一.ES简介 理解倒排索引的概念和作用 理解es和MySql的区别和使用场景 1 ...

  9. 03-ES索引库操作

    索引库操作 索引库就类似数据库表,mapping映射就类似表的结构. 我们要向es中存储数据,必须先创建"库"和"表". mapping映射属性 mapping ...

最新文章

  1. c语言简易绘图程序代码,简单的鼠标绘图程序
  2. linux rmp命令安装包在哪里_【MongoDB系列】Linux系统安装MongoDB
  3. 经典C语言程序100例之四九
  4. vs2012编译boost_1_54_0
  5. dwcs6连接不上access数据库_dw连接access数据库步骤
  6. 数字的补数——力扣476
  7. Service混合开启笔记(startService+bindService)
  8. 网易将在三亚设立海南总部 建设元宇宙产业基地
  9. java se面试题_Java SE 8面试问答(第2部分)
  10. FFmpeg基础库编程开发学习笔记——视频常见格式
  11. USB2.0 描述符
  12. 关于中值滤波算法,以及C语言实现
  13. mysql最左前缀原则学习笔记,in也可以走索引
  14. 互联网行业哪个职业比较有前途?
  15. 一句话拍大片,Gen-2震撼发布,科幻日系二次元统统拿捏住了!
  16. 站群代做关键词排名出技术
  17. HyperLynx(十一)BoardSim和PCB板级仿真分析(二)
  18. 关于PS课程中色彩调整部分的学习总结
  19. Roguelike+单机玩法游戏保护案例
  20. 仿微信、微博发朋友圈,文字+图片+视频

热门文章

  1. Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记 - passover【毕成功的博客】 - 51CTO技术博客...
  2. 虚拟机软件压缩包免费分享
  3. bzoj 4044 Virus synthesis - 回文自动机 - 动态规划
  4. 《脑电信号分析方法与脑机接口技术》笔记——第二章 EEG信号
  5. 服务器v3 v4性能,至强E5 v4性能表现测试_华为 FusionServer RH2288H V3_服务器x86服务器-中关村在线...
  6. 一颗红巨星的最后画面 发出朦胧萤光在星空中绽放
  7. 2012年的日历设计欣赏
  8. java图片覆盖_java中插入背景图片为什么总是覆盖掉按钮啊
  9. ll: command not found
  10. 我来学网络——数字信道中B信道、D信道