ElasticSearch的JavaAPI简单使用

本文介绍了如何使用Elasticsearch的Java API进行索引和文档操作,包括连接ES客户端、创建/查询/删除索引,以及文档的创建、更新、删除、批量操作和高级查询。还提到了避免依赖冲突的方法以及在SpringBoot中集成Elasticsearch的可能性。
摘要由CSDN通过智能技术生成

ES是一个**开源的高扩展的分布式全文搜索引擎,**是整个Elastic Stack技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。Elasticsearch软件是由Java语言开发的,所以也可以通过Java API的方式对Elasticsearch服务进行访问,并且操作的方式基本和Http操作一致

本文已经收录到我的Github: https://github.com/chenliang15405/common-study/tree/main/elasticsearch-demo

Maven依赖

  • pom.xml中加入ES需要的依赖

    <dependencies>
        <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>
    </dependencies>
    
  • 如果在运行时报错

    java.lang.NoSuchMethodError: org.elasticsearch.client.Request.addParameters
    

    那么应该是发生了依赖冲突,新建一个Maven项目,最好不要直接创建springboot项目,可能会有依赖冲突,将上面的依赖加入到maven项目的pom中

链接ES客户端

因为使用的highLevel的ES客户端,所以可以很方便的连接到ES,只需要通过host和port就可以直接连接

public static void main(String[] args) throws IOException {
   
    RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
    );

    esClient.close();
}

如果代码执行正常,没有报错那么就表示正常连接到了ES节点,可以通过获取到的RestHighLevelClient对象进行操作

索引操作

加入了maven依赖,那么就可以通过Java客户端链接到ES进行操作,首先进行索引的基本操作

  • 创建索引

    RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
    );
    @Test
    public void index_create() throws IOException {
         
        // 创建索引 - 请求对象
        CreateIndexRequest request = new CreateIndexRequest("test");
        // 发送请求,获取响应
        CreateIndexResponse response = esClient.indices().create(request, RequestOptions.DEFAULT);
        boolean acknowledged = response.isAcknowledged();
        // 响应状态
        System.out.println("操作状态 = " + acknowledged);
    }
    
  • 查询索引

    RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
    );
    
    @Test
    public void index_get() throws IOException {
         
    
        GetIndexRequest request = new GetIndexRequest("test");
    
        GetIndexResponse response = esClient.indices().get(request, RequestOptions.DEFAULT);
    
        System.out.println(Arrays.toString(response.getIndices()));
        System.out.println(response.getMappings());
        System.out.println(response.getSettings());
    }
    
  • 删除索引

    RestHighLevelClient esClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
    );
    
    @Test
    public void index_delete() throws IOException {
         
    
        DeleteIndexRequest request = new DeleteIndexRequest("test");
    
        AcknowledgedResponse response = esClient.indices().delete(request, RequestOptions.DEFAULT);
    
        System.out.println(response.isAcknowledged());
    }
    

文档操作

文档作为数据的对象,可以通过ES的客户端对象直接操作

RestHighLevelClient对象和上面的创建方式相同,此处省略

文档基本操作
  • 创建文档

    @Test
    public void doc_create() throws IOException {
         
        IndexRequest request = new IndexRequest();
        // 设置操作的索引和当前插入的文档的id
        request.index("people").id("1001");
    
        User user = new User();
        user.setName("张三");
        user.setAge(10);
        user.setSex("男");
    
        ObjectMapper mapper = new ObjectMapper();
        String userJson = mapper.writeValueAsString(user);
    
        request.source(userJson, XContentType.JSON);
    
        IndexResponse response = esClient.index(request, RequestOptions.DEFAULT);
    
        System.out.println(response);
    
        System.out.println("_index" + response.getIndex
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值