Elasticsearch8.5新版的elasticsearch-java使用

本文档详细介绍了如何使用Elasticsearch 8.5.0版本进行API操作,包括创建低级别容器、构建API客户端、执行索引的基本操作(如创建、获取和删除索引)以及文档的增删查改。同时,文章还展示了如何进行简单和嵌套的搜索查询,为Elasticsearch初学者提供了清晰的操作示例。
摘要由CSDN通过智能技术生成

1. 生态

Elasticsearch  使用的是 8.5.0版本的

2.构建API对象

//创建低级容器
BasicCredentialsProvider credent = new BasicCredentialsProvider();
credent.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials("账号","密码"));
RestClient client=RestClient.builder(new HttpHost("localhost", 9200))
                .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
                    @Override
                    public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpAsyncClientBuilder) {
                        return httpAsyncClientBuilder.setDefaultCredentialsProvider(credent);
                    }
                }).build();

 //使用JSON映射器传输数据
        RestClientTransport restClientTransport = new RestClientTransport(client, new JacksonJsonpMapper());
    
 //创建API客户端
 ElasticsearchClient client = new ElasticsearchClient(restClientTransport);

3.索引的一些基本操作

索引的添加删除查找都是基于client中的indices()来进行的,英语里面是index的复数,这样好理解点

3.1添加索引

        CreateIndexResponse demo = client.indices().create(c -> c.index("demo"));

3.2 获取索引

//这里获取的是一个名字是 demo的索引    
 GetIndexResponse shopping = client.indices().get(i -> i.index("demo"));
        System.out.println(shopping);


//获取全部索引    
 IndicesResponse shopping = client.cat().indices();
        shopping.valueBody().forEach(e-> System.out.println(e));

3.2 删除索引

 DeleteIndexResponse demo = client.indices().delete(delete -> delete.index("demo"));

4. 文档的一些基本操作

4.1 通过文档id获取

       /*第一个参数是实际请求
        第二个参数是我们希望文档的 JSON 映射到的类。*/
        GetResponse<Demo> demoResponse= client.get(g -> g
                        .index("demo")
                        .id("1")
                , Demo.class);
        System.out.println(demoResponse);

4.2 获取当前索引的全部文档

SearchResponse<Shopping> shopping = client.search(g -> g
                        .index("shopping")
                , Shopping.class);
   HitsMetadata<Shopping> hits = shopping.hits();
        for (Hit<Shopping> hit : hits.hits()) {
            System.out.println(hit.source());
        }

4.3 添加文档

index:是索引的名称

id:是给文档的id

document:是这个文档的数据

//单个添加
 //给索引创建文档
        IndexResponse index = client.index(i -> i
                .index("demo")
                .id("10004")
                .document(new Demo("8888", 24))
        );



//批量创建
   BulkRequest.Builder br = new BulkRequest.Builder();
        for (Demo demo : demoList) {
            br.operations(op->op
                    .index(idx->idx
                            .index("shopping")
                            .id(demo.id)
                            .document(demo )
                    )
            );
        }
        BulkResponse result = client.bulk(br.build());

   // 记录错误(如果有的话)
        if (result.errors()) {
            System.out.println("Bulk had errors");
            for (BulkResponseItem item: result.items()) {
                if (item.error() != null) {
                    System.out.println(item.error().reason());
                }
            }
        }

5 搜索

5.1 简单搜索查询

在查询时需要对一些数据进行筛选

match:会进行分词 

field:需要筛选的字段

query:筛选的条件

默认会把匹配条件高的数据放在最前面

 SearchResponse<Demo> search = client.search(s -> s
                        .index("demo")
                        .query(q -> q
                                .match(t -> t
                                        .field("name")
                                        .query("8888李")
                                )

                        ),
                Demo.class
        );

        search.hits().hits().forEach(e->{
            System.out.println(e);
        });

5.2 嵌套搜索查询

如果筛选的条件有多个可以进行组合

//name带李的
Query byName = MatchQuery.of(m -> m
                             .field("name")
                             .query("李")
                            )._toQuery();
//年龄等于15的
Query byAge = MatchQuery.of(m -> m
                            .field("age")
                            .query(15)
                           )._toQuery();
//集合姓名和年龄的搜索结果
SearchResponse<Demo> demo= client.search(s -> s
                                                  .index("shopping")
                                                  .query(q -> q
                                                         .bool(b -> b
                                                               .must(byName)
                                                               .must(byAge)
                                                              )
                                                        )
                                                  , Demo.class);
shopping.hits().hits().forEach(e-> System.out.println(e));

小白记录一下,如果哪里有错误支持指正!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值