elasaticsearch新版java客户端ElasticsearchClient详细教程,支持响应式编程,Lambda表达式,兼容旧版High Level Rest Client

这篇具有很好参考价值的文章主要介绍了elasaticsearch新版java客户端ElasticsearchClient详细教程,支持响应式编程,Lambda表达式,兼容旧版High Level Rest Client。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言


elasaticsearch新版java客户端详细教程,支持响应式编程,Lambda表达式。兼容旧版High Level Rest Client。网上相关教程少,我在这里出一个。elasaticsearch相关安装这里不介绍了

一、引入依赖

 		<dependency>
            <groupId>co.elastic.clients</groupId>
            <artifactId>elasticsearch-java</artifactId>
            <version>8.2.2</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.3</version>
        </dependency>

        <dependency>
            <groupId>jakarta.json</groupId>
            <artifactId>jakarta.json-api</artifactId>
            <version>2.0.1</version>
        </dependency>

二、配置连接

有几种方式,这里介绍两种,如果不考虑之前旧版High Level Rest Client的客户端采用第一种就行

1.直接配置连接

	//同步客户端
    public ElasticsearchClient elasticsearchClient(){
        ElasticsearchTransport transport = getElasticsearchTransport();
// And create the API client
        ElasticsearchClient client = new ElasticsearchClient(transport);
        return client;
    }

    //elasticsearch异步客户端
    public ElasticsearchAsyncClient elasticsearchAsyncClient (){
        ElasticsearchTransport transport = getElasticsearchTransport();
// And create the API client
        ElasticsearchAsyncClient client = new ElasticsearchAsyncClient(transport);
        return client;
    }
	//ElasticsearchTransport用于创建客户端
    public ElasticsearchTransport getElasticsearchTransport(){
        CredentialsProvider credentialsProvider =
                new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY,
                new UsernamePasswordCredentials(username, password));//配置用户名密码
        // Create the low-level client
        RestClient restClient = RestClient.builder(
                        new HttpHost(host, port)) //配置路径 端口
                .setHttpClientConfigCallback(httpAsyncClientBuilder ->
                        httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider))
                .build();
// Create the transport with a Jackson mapper
        ElasticsearchTransport transport = new RestClientTransport(
                restClient, new JacksonJsonpMapper());
        return transport;
    }

阻塞和异步客户端
API 客户端有两种形式:阻塞和异步。异步客户端上的所有方法都返回一个标准CompletableFuture.
根据需要,两种风格可以同时使用,共享相同的传输对象。我们这里就介绍同步客户端的使用。

2.从旧版High Level Rest Client迁移值新版

两种客户端可以同时存在,自行选择使用

// 低级客户端
RestClient httpClient = RestClient.builder(
    new HttpHost("localhost", 9200)
).build();

//创建旧版旧版High Level Rest Client
RestHighLevelClient hlrc = new RestHighLevelClientBuilder(httpClient)
    .setApiCompatibilityMode(true) 
    .build();

// 创建新版ElasticsearchClient 
ElasticsearchTransport transport = new RestClientTransport(
    httpClient,
    new JacksonJsonpMapper()
);
ElasticsearchClient esClient = new ElasticsearchClient(transport);

2.Lambda表达式相关api的使用

创建索引

    @Test
    public void createIndex() throws IOException {
        ElasticsearchClient client = getElasticsearchClient();
        System.out.println("连接成功--------------------------");
        CreateIndexResponse createIndexResponse = client.indices().create(
                index ->
                        index.index("productlist").aliases("product" , aliase ->
                                aliase.isWriteIndex(true))
        );

        System.out.println(createIndexResponse.toString());

    }

写入单个文档

实体类

public class Product implements Serializable {
    private static final long serialVersionUID = 1L;
    private String no;
    private String name;
    private String createBy;

    public Product() {
    }

    public Product(String no, String name, String createBy) {
        this.no = no;
        this.name = name;
        this.createBy = createBy;
    }

    public String getNo() {
        return no;
    }

    public void setNo(String no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCreateBy() {
        return createBy;
    }

    public void setCreateBy(String createBy) {
        this.createBy = createBy;
    }

    @Override
    public String toString() {
        return "Product{" +
                "no='" + no + '\'' +
                ", name='" + name + '\'' +
                ", createBy='" + createBy + '\'' +
                '}';
    }
}
Product product = new Product("bk-1", "City bike", 123.0);

IndexResponse response = esClient.index(i -> i
    .index("products")
    .id(product.getSku())
    .document(product)
);

批量插入

 @Test
    public void bulkInsertDocument() throws IOException {
        ElasticsearchClient client = getElasticsearchClient();
        System.out.println("连接成功--------------------------");
        List<Product> products = new ArrayList<>();
        products.add(new Product("asdad","dasdasd","adasdasdad"));
        products.add(new Product("12313","453","sfsdfdsfdsf"));

        BulkRequest.Builder br = new BulkRequest.Builder();

        for (Product product : products) {
            br.operations(
                    op -> op.index(index -> index
                            .index("productlist").document(product))
            );
        }

        BulkResponse bulk = client.bulk(br.build());
        System.out.println(bulk);
    }

通过id查找文档

    @Test
    public void getOne() throws IOException {
        ElasticsearchClient client = getElasticsearchClient();
        System.out.println("连接成功--------------------------");
        GetResponse<Product> response = client.get(g -> g
                        .index("productlist")
                        .id("7ROTUIEBMxTIVL_J85rw"),
                Product.class
        );
        System.out.println(response.source());
    }

搜索文档

String searchText = "bike";

SearchResponse<Product> response = esClient.search(s -> s
    .index("productlist") 
    .query(q -> q      
        .match(t -> t   
            .field("name")  
            .query(searchText)
        )
    ),
    Product.class      
);

TotalHits total = response.hits().total();
boolean isExactResult = total.relation() == TotalHitsRelation.Eq;

if (isExactResult) {
    logger.info("There are " + total.value() + " results");
} else {
    logger.info("There are more than " + total.value() + " results");
}

List<Hit<Product>> hits = response.hits().hits();
for (Hit<Product> hit: hits) {
    Product product = hit.source();
    logger.info("Found product " + product.getSku() + ", score " + hit.score());
}

聚合文档

String searchText = "bike";

Query query = MatchQuery.of(m -> m
    .field("name")
    .query(searchText)
)._toQuery();

SearchResponse<Void> response = esClient.search(b -> b
    .index("products")
    .size(0) 
    .query(query) 
    .aggregations("price-histogram", a -> a 
        .histogram(h -> h 
            .field("price")
            .interval(50.0)
        )
    ),
    Void.class 
);

总结

以上就是这篇要讲的内容,更多详细用法参考官网文档https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/index.html文章来源地址https://www.toymoban.com/news/detail-414436.html

到了这里,关于elasaticsearch新版java客户端ElasticsearchClient详细教程,支持响应式编程,Lambda表达式,兼容旧版High Level Rest Client的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 腾讯客户端Java一面

    本人WHU软工,大三,之前用Java刷过一些题目,寒假跟着敲了苍穹外卖。两个星期前开始背八股,看了点java基础,JVM,反射,多线程,还有SSM框架,MySQL,Redis。本来觉得3月底才能做好面试的准备,没想到3月11号被约第二天面试,觉得时间太紧想拖到15号,但tx那边说再晚简历

    2024年04月16日
    浏览(35)
  • Java WebSocket客户端

    1.依赖 2.代码 1.依赖 2.代码 2.1 自定义 websocket handler 2.2 将websocket handler加入容器 2.3 定时器监控

    2024年02月16日
    浏览(40)
  • Elasticsearch Java客户端

    客户端 优点 缺点 说明 Java Low Level Rest Client 与ES版本之间没有关系,适用于作为所有版本ES的客户端 Java High Level Rest Client 使用最多 使用需与ES版本保持一致 基于Low Level Rest Client, 注意:7.15版本之后将被弃用 TransportClient 使用Transport 接口进行通信,能够使用ES集群中的一些特

    2024年02月15日
    浏览(30)
  • Redis的Java客户端

    以下是redis.io官网所推荐使用前五的Java客户端 Java客户端 特点 Jedis 以Redis命令作为方法名称,学习成本低,简单实用,但是Jedis实例是线程不安全的,多线程环境下需要基于连接池来使用 lettuce Lettuce是基于Netty实现的,支持同步、异步和响应式编程方式,并且是线程安全的。

    2024年02月13日
    浏览(41)
  • Java 获取客户端IP

      ps:代码引用于 JAVA获取客户端IP地址-CSDN博客 https://blog.csdn.net/m0_71867302/article/details/129683061?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170738691916800226562378%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257Drequest_id=170738691916800226562378biz_id=0utm_medium=distribute.pc_search_result.none-task-bl

    2024年02月22日
    浏览(38)
  • Redis中的Java客户端

    Jedis是一个Java实现的Redis客户端连接工具。 Jedis使用非常简单,直接引入依赖。基于默认参数的Jedis连接池,初始化连接池类(使用默认连接池参数)JedisPool,获取一个Jedis连接Jedis jedis=jp.getResource()。 Jedis是线程不安全的,多线程使用同一个Jedis实例,会出现并发问题,原因是

    2024年01月17日
    浏览(46)
  • websocket客户端实现(java)

    其中,headers 参数是一个键值对,表示需要设置的请求头。在构造函数中,我们首先创建了一个 ClientEndpointConfig.Configurator 对象,重写了其中的 beforeRequest() 方法,用于在请求之前设置请求头。然后,我们使用 ClientEndpointConfig.Builder.create() 方法创建一个 ClientEndpointConfig 对象,并

    2024年02月15日
    浏览(45)
  • Java实现websocket客户端

    常规情况下,大多数时候Java后台作为websocket服务端,实现方式也比较简单,网上很多案例代码。但是很多时候项目中服务与服务之间也需要使用websocket通信,此时项目就需要实现客户端功能。 步骤一:导入依赖: 步骤二:实现WebSocketClient抽象类: 该类中和websocket服务端接口

    2024年02月16日
    浏览(55)
  • java 客户端操作HDFS

    部署包win版本 源码包zip包 lib整合:共121个jar包 $HADOOP_PREFIX/share/hadoop/{common,hdfs,mapreduce,yarn,tools}/{lib,.}*.jar  将windows版本hadoop/bin/hadoop.dll 放到c:/windows/system32下 hadoop的bin和sbin目录放PATH中+HADOOP_HOME+HADOOP_USER_NAME=root 安装插件 配置 重启电脑!!!!!!!加载hadoop.dll 创建java p

    2024年02月10日
    浏览(48)
  • java socket Server TCP服务端向指定客户端发送消息;可查看、断开指定连接的客户端;以及设置客户端最大可连接数量。

    首先需要知道java里如何创建一个Socket服务器端。 提示:注意server.accept()方法调用会阻塞,只有新的客户端连接后才返回一个新的socket对象。如果一直未连接那么会一直处于阻塞状态 了解了如何创建一个socket服务器端后。那么如何实现给指定的连接客户端发送消息呢?首先我

    2024年02月11日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包