千家信息网

如何实现ElasticSearch的JavaAPI

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本篇内容主要讲解"如何实现ElasticSearch的JavaAPI",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何实现ElasticSearch的Ja
千家信息网最后更新 2025年02月01日如何实现ElasticSearch的JavaAPI

本篇内容主要讲解"如何实现ElasticSearch的JavaAPI",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何实现ElasticSearch的JavaAPI"吧!

(一)概述

有人说学习一项技术最好的资料是官方文档,对大部分技术来说确实是这样的。但是官方文档不一定适合每个人去看,比如一个初学者,直接让他看Spring的官方文档,其实是不合适的。今天我会结合ElasticSearch的一个客户端官方文档介绍ES在Java中的API应用。

官方文档不一定好找,这里直接给出地址:

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.6/index.html

你可以选择自己对应版本的文档来参考,我这里选择的是7.6版本,选用的是Java High Level REST Client。

(二)项目搭建

2.1 引入依赖

首先需要创建一个项目,创建项目就不介绍了,引入ES核心依赖:

    org.springframework.boot    spring-boot-starter-data-elasticsearch

为了防止版本问题导致服务器客户端冲突,尽量将ES的版本设置的和自己安装的服务器端版本一致:

    1.8    7.6.1

后续还会用一些json和web以及测试的操作,引入这些依赖:

    org.springframework.boot    spring-boot-starter-web    org.projectlombok    lombok    true    org.springframework.boot    spring-boot-starter-test    test    com.alibaba    fastjson    1.2.76

2.2 项目基本配置

编写个配置类注入restHighLevelClient对象:

@Configurationpublic class ElasticSearchConfig {    @Bean    public RestHighLevelClient restHighLevelClient(){        RestHighLevelClient client=new RestHighLevelClient(                RestClient.builder(                        new HttpHost("192.168.78.128",9200,"http")                )        );        return client;    }}

后续会用到实体类,这里先提供了:

@Data@AllArgsConstructorpublic class User {    private String name;    private String address;}

接下来的操作都在SpringBootTest中进行,首先通过@Autowired注入

RestHighLevelClient 对象@SpringBootTestclass ElasticsearchdemoApplicationTests {    @Autowired    private RestHighLevelClient restHighLevelClient;}

(三)索引API

还是按照学习ES语法的顺序学习语法,找到索引API ,API中的操作很多,我主要选一些重要的讲一下

3.1 创建索引

创建索引的主要对象是CreateIndexRequest

@Testpublic void testCreateIndex() throws IOException {    //创建索引    CreateIndexRequest request=new CreateIndexRequest("test_index");    CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);    System.out.println(createIndexResponse.isAcknowledged());}

创建CreateIndexRequest对象,设置相关属性,比如切片数,副本数,超时时间等等,然后通过restHighLevelClient创建索引,获得一个结果响应。

//设置分片和副本request.settings(Settings.builder()     .put("index.number_of_shards", 3)    .put("index.number_of_replicas", 2));

3.2 获取索引

获取一个索引,主要对象是GetIndexRequest

@Testpublic void testGetIndex() throws IOException {    //获取索引    GetIndexRequest request=new GetIndexRequest("test_index");    GetIndexResponse getIndexResponse = restHighLevelClient.indices().get(request, RequestOptions.DEFAULT);    System.out.println(getIndexResponse);}

3.3 判断索引是否存在

用的也是GetIndexRequest

@Testpublic void testExistsIndex() throws IOException {    //获取索引    GetIndexRequest request=new GetIndexRequest("test_index");    boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);    System.out.println(exists);}

3.4 删除索引

删除索引的请求对象是DeleteIndexRequest

@Testpublic void testDeleteIndex() throws IOException {    DeleteIndexRequest request=new DeleteIndexRequest("test_index");    AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);    System.out.println(delete.isAcknowledged());}

对索引的操作可以通过图形化界面来实现,了解增删改即可。

(四)文档API

文档的API分为单个文档处理和批量文档处理,我会介绍单个文档的增删改查和一个批量文档API

4.1 创建文档

在用语法创建文档的时候,是这样的:

PUT http://ip:port/索引名/类型名/文档id{    "name":"javayz",    "address":"hz"}

使用代码是这样的:请求对象为IndexRequest

@Testpublic void testCreateDoc() throws IOException {    // PUT http://ip:port/索引名/类型名/文档id    User user=new User("javayz","hz");    IndexRequest request=new IndexRequest("text_index");    request.id("1");    request.source(JSON.toJSONString(user), XContentType.JSON);    IndexResponse index = restHighLevelClient.index(request, RequestOptions.DEFAULT);    System.out.println(index.status());}

其实两者十分相似,这也是学技术要先学基础的原因。有了基础一看就懂。

4.2 获取文档

获取文档和判断是否存在这里放在一起写,请求对象都是GetRequest :

@Testpublic void testGetDoc() throws IOException{    GetRequest request=new GetRequest("text_index");    request.id("1");    boolean exists = restHighLevelClient.exists(request, RequestOptions.DEFAULT);    if (exists){        GetResponse documentFields = restHighLevelClient.get(request, RequestOptions.DEFAULT);        String sourceAsString = documentFields.getSourceAsString();        System.out.println(sourceAsString);    }else{        System.out.println(exists);    }}

4.3 更新文档

更新文档的请求对象是UpdateRequest

@Testpublic void testUpdateDoc() throws IOException{    UpdateRequest request=new UpdateRequest("text_index","1");    User user=new User("javayz2","hz");    request.doc(JSON.toJSONString(user),XContentType.JSON);    UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);    System.out.println(response.status());}

4.4 删除文档

删除文档的请求对象是DeleteRequest

@Testpublic void testDeleteDoc() throws IOException{    DeleteRequest request=new DeleteRequest("text_index","1");    DeleteResponse deleteResponse = restHighLevelClient.delete(request, RequestOptions.DEFAULT);    System.out.println(deleteResponse.status());}

4.5 批量创建文档

批量创建文档用到了BulkRequest ,具体的使用方式和单体很相似,只不过是把多个请求聚合到一个bulk中一起提交。

@Testpublic void testBulkRequest() throws IOException{    BulkRequest request=new BulkRequest();    request.timeout("10s");    ArrayList list=new ArrayList<>();    list.add(new User("javayz1","hz"));    list.add(new User("javayz2","hz"));    //往BulkRequest对象中add文档    list.stream().forEach(x->{        request.add(new IndexRequest("text_index").source(JSON.toJSONString(x),XContentType.JSON));    });    BulkResponse bulk = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);    System.out.println(bulk.status());}

(五)查询API

查询操作用最常用的就是match(模糊查询)和term(精确查询),介绍最常用的查询方式:

@Testpublic void testSearch() throws IOException {    SearchRequest request = new SearchRequest("text_index");    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();    //匹配条件    MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", "javayz1");    searchSourceBuilder.query(matchQueryBuilder);    request.source(searchSourceBuilder);    SearchResponse search = restHighLevelClient.search(request, RequestOptions.DEFAULT);    System.out.println(search);}

到此,相信大家对"如何实现ElasticSearch的JavaAPI"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0