Elasticsearch简单学习

devtools/2025/3/3 15:07:13/

1、依赖的导入

<!--ES依赖-->
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>

2、客户端链接

java">RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://localhost:9200")));

3、索引库的相关操作

1、索引库的创建
java">@Test
void createTestIndex() throws IOException {/*创建索引库*///1.创建Request对象,索引库名称必须为小写字母CreateIndexRequest request = new CreateIndexRequest("test_index");String source = "{\n" +"        \"mappings\":{\n" +"        \"properties\":{\n" +"            \"id\":{\n" +"                \"type\":\"integer\"\n" +"            },\n" +"            \"name\":{\n" +"                \"type\":\"text\",\n" +"                \"analyzer\":\"ik_max_word\"\n" +"            },\n" +"            \"age\":{\n" +"                \"type\":\"integer\"\n" +"            },\n" +"            \"sex\":{\n" +"                \"type\":\"keyword\"\n" +"            },\n" +"            \"bossId\":{\n" +"                \"type\":\"integer\"\n" +"            },\n" +"            \"departmentId\":{\n" +"                \"type\":\"integer\"\n" +"            }\n" +"        }\n" +"    }\n" +"}";//2.准备请求的参数:DSL语句request.source(source, XContentType.JSON);//3.发请求client.indices().create(request, RequestOptions.DEFAULT);
}
2、判断索引库是否存在
java">@Test
void existsTestIndex() throws IOException {/*判断索引库是否存在*///1.创建Request对象,名称必须为小写字母GetIndexRequest request = new GetIndexRequest("test_index");//2.发请求boolean is = client.indices().exists(request, RequestOptions.DEFAULT);System.out.println(is);
}
3、删除索引库
java">@Test
void deleteTestIndex() throws IOException {/*删除索引库*///1.创建Request对象,名称必须为小写字母DeleteIndexRequest request = new DeleteIndexRequest("test_index");//2.发请求client.indices().delete(request, RequestOptions.DEFAULT);
}

4、文档的操作

1、创建文档
java">@Test
void createDocTest() throws IOException {//从数据库中获取数据对象Employee employee = employeeMapper.selectAllById(1);//1. 创建Request对象IndexRequest request = new IndexRequest("test_index").id(employee.getId().toString());//2.准备json文档String source = JSON.toJSONString(employee);//2.1准备json文档request.source(source, XContentType.JSON);//3.发请求client.index(request, RequestOptions.DEFAULT);
}
2、获取指定的文档
java">@Test
void getDocTest() throws IOException {//1.创建Request对象GetRequest request = new GetRequest("test_index","1");//2.发请求,得到结果GetResponse response = client.get(request, RequestOptions.DEFAULT);//3.解析结果String json = response.getSourceAsString();System.out.println(json);Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);
}
3、更新文档
java">@Test
void updateDocTest() throws IOException {//1.创建Request对象UpdateRequest request = new UpdateRequest("test_index","1");//2.准备DSL语句request.doc("age",18);//3.发请求client.update(request,RequestOptions.DEFAULT);
}
4、删除文档
java">@Test
void deleteDocTest() throws IOException {//1.创建Request对象DeleteRequest request = new DeleteRequest("test_index","1");//2.发请求client.delete(request,RequestOptions.DEFAULT);
}
5、批量操作(创建)
java">@Test
void batchCreateDocTest() throws IOException {//1.创建Request对象BulkRequest request = new BulkRequest();//2.准备DSL语句,批量增加文档List<Employee> employees = employeeMapper.selectAll();for(Employee e : employees){request.add(new IndexRequest("test_index").id(e.getId().toString()).source(JSON.toJSONString(e),XContentType.JSON));}//3.发请求client.bulk(request,RequestOptions.DEFAULT);
}

5、搜索文档

1、分词查询-查询全部
java">@Test
void matchAllTest() throws IOException {  //分词查询//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2.组织DSL参数request.source() // 查询全部.query(QueryBuilders.matchAllQuery());//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);}
}
2、分词查询-指定字段
java">@Test
void matchQueryTest() throws IOException { //分词查询//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2.组织DSL参数request.source() //查询指定字段的值,也可以指定多个字段 .multiMatchQuery().query(QueryBuilders.matchQuery("name","晨"));//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);}
}
3、精确查询
java">@Test
void termQueryTest() throws IOException {  //精确查询//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2.组织DSL参数request.source() //精确查询只能查询 非text(分词字段),如果查询分词字段,则自动采用模糊分词查询.query(QueryBuilders.termQuery("age","33"));//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);}
}
4、范围查询
java">@Test
void rangeQueryTest() throws IOException {  //范围查询//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2.组织DSL参数request.source() //范围查询,gte:大于等于,lte:小于等于,gt:大于,lt:小于.query(QueryBuilders.rangeQuery("age").gte(30).lte(35));//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);}
}
5、复合查询
java">@Test
void boolQueryTest() throws IOException {  //复合查询//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2.1创建复合查询对象BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();//2.2添加查询条件boolQuery.must(QueryBuilders.matchQuery("name","雨"));boolQuery.filter(QueryBuilders.rangeQuery("age").gte(20).lte(35));//2.3组织DSL参数request.source().query(boolQuery);//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);}
}
6、分页排序查询
java">@Test
void pageSortQueryTest() throws IOException {  //分页、排序查询// 页码,每页大小int page = 3,size = 10;//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2组织DSL参数request.source().from((page-1)*size) // 包含form,(page-1)*size,是前端传过来的页码和每页条数.size(size).sort("id", SortOrder.ASC).query(QueryBuilders.matchAllQuery());//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);System.out.println(employee);}
}
6、高亮查询
java">@Test
void highLightQueryTest() throws IOException {  //高亮查询//1.准备RequestSearchRequest request = new SearchRequest("test_index");//2组织DSL参数request.source().highlighter(new HighlightBuilder() //高亮显示.field("name") //字段名.requireFieldMatch(false) // 是否与查询字段匹配) // 用的默认标签 <em></em>.query(QueryBuilders.matchQuery("name","晨"));//3.发送请求SearchResponse response = client.search(request,RequestOptions.DEFAULT);//4.解析结果SearchHits searchHits = response.getHits();//4.1获取总条数long total = searchHits.getTotalHits().value;System.out.println("总共有:" + total + "条数据");//4.2获取文档数组SearchHit[] hits = searchHits.getHits();//4.3遍历数组for(SearchHit h : hits){String json = h.getSourceAsString();Employee employee = JSON.parseObject(json, Employee.class);// 高亮显示,因为每条数据都是带有 晨 的,所以每条数据都有一个HighlightField用于替换HighlightField name = h.getHighlightFields().get("name");//替换employee.setName(name.getFragments()[0].toString());System.out.println(employee);}
}

http://www.ppmy.cn/devtools/164214.html

相关文章

Android Activity启动流程详解

目录 Activity 启动流程详细解析 1. 应用层发起启动请求 1.1 调用 startActivity() 1.2 通过 Instrumentation 转发请求 2. 系统服务处理&#xff08;AMS 阶段&#xff09; 2.1 Binder IPC 通信 2.2 AMS 处理流程 2.3 跨进程回调 ApplicationThread 3. 目标进程初始化…

基于机器学习的结构MRI分析:预测轻度认知障碍向阿尔茨海默病的转化

摘要 阿尔茨海默病是一种致残性神经退行性疾病&#xff0c;目前尚无有效的治疗方法。预测阿尔茨海默病的诊断对患者的预后至关重要&#xff0c;但目前的阿尔茨海默病生物标志物检测方法具有侵入性、耗时且昂贵。因此&#xff0c;开发基于MRI的计算方法用于阿尔茨海默病的早期诊…

RISC-V汇编学习(一)—— 基础认识

最近这三年的工作时间大部分的工作&#xff0c;都是基于riscv的cpu和接口ip开发适配驱动&#xff0c;时不时的就要debug测试代码&#xff0c;面对很多都是汇编&#xff0c;所以也是整理下积累的一点点笔记&#xff0c;系列博客将总结下riscv相关的内容&#xff0c;一是给有需要…

【Unity精品源码】Ultimate Character Controller:高级角色控制器完整解决方案

&#x1f4c2; Unity 开发资源汇总 | 插件 | 模型 | 源码 &#x1f493; 欢迎访问 Unity 打怪升级大本营 在Unity游戏开发的世界中&#xff0c;角色控制器是构建游戏互动性的核心组件之一。Ultimate Character Controller是一款专为Unity引擎设计的高级角色控制器&#xff0c;它…

python中单例模式介绍(含线程安全的单例模式)

理解单例模式之前&#xff0c;确实需要先掌握 __init__、__new__ 和 __call__ 这三个方法的作用和调用顺序。如有需要&#xff0c;读者可跳转下方链接学习&#xff1a; python中的__init__、__new__、__call__-CSDN博客 正文开始&#xff1a; 在Python中&#xff0c;单例模式&…

Qt 文件操作+多线程+网络

文章目录 1. 文件操作1.1 API1.2 例子1&#xff0c;简单记事本1.3 例子2&#xff0c;输出文件的属性 2. Qt 多线程2.1 常用API2.2 例子1&#xff0c;自定义定时器 3. 线程安全3.1 互斥锁3.2 条件变量 4. 网络编程4.1 UDP Socket4.2 UDP Server4.3 UDP Client4.4 TCP Socket4.5 …

EMO模型详解及代码复现

EMO定义 EMO(Efficient Mobile Networks)是一种 面向移动端的轻量化网络模型 ,旨在 在参数、FLOPs和性能之间实现平衡 ,特别适用于 密集预测任务 。EMO的设计理念源于对CNN和Transformer架构的深入理解,通过整合两者的优势,实现了高效的模型性能。 EMO的核心是 反向残差…

【北京迅为】itop-3568 开发板openharmony鸿蒙烧写及测试-第2章OpenHarmony v3.2-Beta4版本测试

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…