1、依赖的导入
- <!--ES依赖-->
- <dependency>
- <groupId>org.elasticsearch.client</groupId>
- <artifactId>elasticsearch-rest-high-level-client</artifactId>
- </dependency>
复制代码 2、客户端链接
- RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://localhost:9200")));
复制代码 3、索引库的相关操作
1、索引库的创建
- @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、判定索引库是否存在
- @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、删除索引库
- @Test
- void deleteTestIndex() throws IOException {
- /*删除索引库*/
- //1.创建Request对象,名称必须为小写字母
- DeleteIndexRequest request = new DeleteIndexRequest("test_index");
- //2.发请求
- client.indices().delete(request, RequestOptions.DEFAULT);
- }
复制代码 4、文档的操作
1、创建文档
- @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、获取指定的文档
- @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、更新文档
- @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、删除文档
- @Test
- void deleteDocTest() throws IOException {
- //1.创建Request对象
- DeleteRequest request = new DeleteRequest("test_index","1");
- //2.发请求
- client.delete(request,RequestOptions.DEFAULT);
- }
复制代码 5、批量操作(创建)
- @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、分词查询-查询全部
- @Test
- void matchAllTest() throws IOException { //分词查询
- //1.准备Request
- SearchRequest 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、分词查询-指定字段
- @Test
- void matchQueryTest() throws IOException { //分词查询
- //1.准备Request
- SearchRequest 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、精确查询
- @Test
- void termQueryTest() throws IOException { //精确查询
- //1.准备Request
- SearchRequest 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、范围查询
- @Test
- void rangeQueryTest() throws IOException { //范围查询
- //1.准备Request
- SearchRequest 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、复合查询
- @Test
- void boolQueryTest() throws IOException { //复合查询
- //1.准备Request
- SearchRequest 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、分页排序查询
- @Test
- void pageSortQueryTest() throws IOException { //分页、排序查询
- // 页码,每页大小
- int page = 3,size = 10;
- //1.准备Request
- SearchRequest 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、高亮查询
- @Test
- void highLightQueryTest() throws IOException { //高亮查询
- //1.准备Request
- SearchRequest 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);
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |