【Elasticsearch】- 使用JavaAPI操作elasticsearch

工程准备

创建maven工程并引入Elasticsearch相关依赖:

        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.8.0</version>
        </dependency>
        <!-- elasticsearch 的客户端 -->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.8.0</version>
        </dependency>
        <!-- elasticsearch 依赖 2.x 的 log4j -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.9</version>
        </dependency>
        <!-- junit 单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

索引操作

创建索引

    @Test
    public void index_create_test() throws IOException {
        //创建Elasticsearch客户端
        RestHighLevelClient esClient = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost",9200,"http"))
        );

        //创建索引
        CreateIndexRequest request = new CreateIndexRequest("student");
        CreateIndexResponse createIndexResponse = esClient.indices().create(request, RequestOptions.DEFAULT);

        boolean acknowledged = createIndexResponse.isAcknowledged();
        System.out.println("响应状态:"+acknowledged);

        //关闭Elasticsearch客户端
        esClient.close();
    }

使用Postman测试索引是否成功:

在这里插入图片描述

查询索引

    @Test
    public void index_get_test() throws IOException {
        //创建Elasticsearch客户端
        RestHighLevelClient esClient = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost",9200,"http"))
        );

        //查询索引
        GetIndexRequest getIndexRequest = new GetIndexRequest("student");
        GetIndexResponse getIndexResponse = esClient.indices().get(getIndexRequest, RequestOptions.DEFAULT);

        System.out.println(getIndexResponse.getAliases());
        System.out.println(getIndexResponse.getMappings());
        System.out.println(getIndexResponse.getSettings());
        
        //关闭Elasticsearch客户端
        esClient.close();
    }

在这里插入图片描述

删除索引

    @Test
    public void index_delete_test() throws IOException {
        //创建Elasticsearch客户端
        RestHighLevelClient esClient = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost",9200,"http"))
        );

        //删除索引
        DeleteIndexRequest getIndexRequest = new DeleteIndexRequest("student");
        AcknowledgedResponse delete = esClient.indices().delete(getIndexRequest, RequestOptions.DEFAULT);

        System.out.println(delete.isAcknowledged());

        //关闭Elasticsearch客户端
        esClient.close();
    }

文档操作

进行文档操作前,先创建文档数据对应的java实体类Student:

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Student {
    private String name;
    private int age;
    private String sex;
    private String level;
}

添加文档数据

    @Test
    public void doc_insert_test() throws IOException {
        //创建Elasticsearch客户端
        RestHighLevelClient esClient = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost",9200,"http"))
        );

        IndexRequest request = new IndexRequest();
        request.index("student").id("10000");

        Student student = new Student();
        student.setName("王同学");
        student.setAge(22);
        student.setSex("男");
        student.setLevel("研究生");

        ObjectMapper mapper = new ObjectMapper();
        String studentJson = mapper.writeValueAsString(student);

        request.source(studentJson, XContentType.JSON);
        IndexResponse response = esClient.index(request, RequestOptions.DEFAULT);
        System.out.println(response.getResult());

        //关闭Elasticsearch客户端
        esClient.close();
    }

批量添加文档数据

    @Test
    public void doc_insert_batch_test() throws IOException {
        //创建Elasticsearch客户端
        RestHighLevelClient esClient = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost",9200,"http"))
        );

        BulkRequest request = new BulkRequest();

        request.add(new IndexRequest().index("student").id("10001").source(XContentType.JSON, "name", "张三"));
        request.add(new IndexRequest().index("student").id("10002").source(XContentType.JSON, "name", "李四"));
        request.add(new IndexRequest().index("student").id("10003").source(XContentType.JSON, "name", "王五"));

        BulkResponse response = esClient.bulk(request, RequestOptions.DEFAULT);
        System.out.println(response.getItems());

        //关闭Elasticsearch客户端
        esClient.close();
    }

在这里插入图片描述

修改文档数据

@Test
    public void doc_update_test() throws IOException {
        //创建Elasticsearch客户端
        RestHighLevelClient esClient = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost",9200,"http"))
        );

        UpdateRequest request = new UpdateRequest();
        request.index("student").id("10000");
        request.doc(XContentType.JSON,"sex","女");

        UpdateResponse response = esClient.update(request, RequestOptions.DEFAULT);
        System.out.println(response.getResult());

        //关闭Elasticsearch客户端
        esClient.close();
    }

根据id查询文档数据

    @Test
    public void doc_search_test() throws IOException {
        //创建Elasticsearch客户端
        RestHighLevelClient esClient = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost",9200,"http"))
        );

        GetRequest request = new GetRequest();
        request.index("student").id("10000");
        GetResponse response = esClient.get(request, RequestOptions.DEFAULT);
        System.out.println(response.getSourceAsString());

        //关闭Elasticsearch客户端
        esClient.close();
    }

在这里插入图片描述

查询当前索引所有文档数据

    @Test
    public void doc_search_all_test() throws IOException {
        //创建Elasticsearch客户端
        RestHighLevelClient esClient = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost",9200,"http"))
        );

        SearchRequest request = new SearchRequest();
        request.indices("student");

        request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));

        SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

        SearchHits hits = response.getHits();
        System.out.println(hits.getTotalHits());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }

        //关闭Elasticsearch客户端
        esClient.close();
    }

在这里插入图片描述

分页查询

    @Test
    public void doc_search_size_test() throws IOException {
        //创建Elasticsearch客户端
        RestHighLevelClient esClient = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost",9200,"http"))
        );

        SearchRequest request = new SearchRequest();
        request.indices("student");

        SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        builder.from(0);
        builder.size(2);

        request.source(builder);

        SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);

        SearchHits hits = response.getHits();
        System.out.println(hits.getTotalHits());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }

        //关闭Elasticsearch客户端
        esClient.close();
    }

在这里插入图片描述

模糊查询

    @Test
    public void doc_search_match_test() throws IOException {
        //创建Elasticsearch客户端
        RestHighLevelClient esClient = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost",9200,"http"))
        );

        SearchRequest request = new SearchRequest();
        request.indices("student");
        request.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("name","王")));

        SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        System.out.println(hits.getTotalHits());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }

        //关闭Elasticsearch客户端
        esClient.close();
    }

在这里插入图片描述

删除文档数据

    @Test
    public void doc_delete_test() throws IOException {
        //创建Elasticsearch客户端
        RestHighLevelClient esClient = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost",9200,"http"))
        );

        DeleteRequest request = new DeleteRequest();
        request.index("student").id("10000");
        DeleteResponse response = esClient.delete(request, RequestOptions.DEFAULT);
        System.out.println(response.getResult());

        //关闭Elasticsearch客户端
        esClient.close();
    }
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
连接 ElasticsearchJava API 主要包括以下几个步骤: 1. 引入 ElasticsearchJava API 依赖 在项目的 pom.xml 文件中添加以下依赖: ``` <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client</artifactId> <version>7.9.2</version> </dependency> ``` 2. 创建 Elasticsearch 的客户端 在 Java 代码中,通过 RestClient 的静态方法 `RestClient.builder()` 来创建 Elasticsearch 的客户端,示例如下: ``` RestClientBuilder builder = RestClient.builder( new HttpHost("localhost", 9200, "http") ); RestHighLevelClient client = new RestHighLevelClient(builder); ``` 其中,`HttpHost` 为 Elasticsearch 的地址和端口号,可以根据实际情况进行修改。 3. 操作 Elasticsearch 创建客户端之后,就可以使用 ElasticsearchJava API 进行操作了。以下是一些常见的操作示例: - 创建索引: ``` CreateIndexRequest request = new CreateIndexRequest("index_name"); client.indices().create(request, RequestOptions.DEFAULT); ``` - 删除索引: ``` DeleteIndexRequest request = new DeleteIndexRequest("index_name"); client.indices().delete(request, RequestOptions.DEFAULT); ``` - 添加文档: ``` IndexRequest request = new IndexRequest("index_name"); request.id("document_id"); request.source("field1", "value1", "field2", "value2"); IndexResponse response = client.index(request, RequestOptions.DEFAULT); ``` - 获取文档: ``` GetRequest request = new GetRequest("index_name", "document_id"); GetResponse response = client.get(request, RequestOptions.DEFAULT); ``` - 搜索文档: ``` SearchRequest request = new SearchRequest("index_name"); SearchSourceBuilder builder = new SearchSourceBuilder(); builder.query(QueryBuilders.termQuery("field1", "value1")); request.source(builder); SearchResponse response = client.search(request, RequestOptions.DEFAULT); ``` 以上仅是 Elasticsearch Java API 的一部分示例,具体的操作可以根据实际需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1 + 1=王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值