elasticsearch-java客户端操作

这篇具有很好参考价值的文章主要介绍了elasticsearch-java客户端操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

elasticsearch java客户端基本操作学习: 索引,文档,检索

前提

版本:

​ elasticsearch版本: 8.3.2

​ elasticsearch-java: 8.3.2

问题: springboot项目可能冲突,抛出异常

ClassNotFoundException: jakarta.json.spi.JsonProvider

解决:添加依赖,具体解决方法: https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/installation.html文章来源地址https://www.toymoban.com/news/detail-541653.html

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

添加maven依赖

<dependency>
    <groupId>co.elastic.clients</groupId>
    <artifactId>elasticsearch-java</artifactId>
    <version>8.3.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>

连接elasticsearch客户端

private static final String TEST_INDEX = "test_demo";
private static ElasticsearchTransport transport;
private static ElasticsearchClient client;

public static void main(String[] args) throws IOException {
    //连接
    esInit();
    //操作
    operationDoc();
    //关闭连接
    transport.close();
}

// 连接
private static void esInit() {
    // Create the low-level client
    RestClient restClient = RestClient.builder(
        new HttpHost("localhost", 9200)).build();

    // Create the transport with a Jackson mapper
    transport = new RestClientTransport(
        restClient, new JacksonJsonpMapper());

    // And create the API client
    client = new ElasticsearchClient(transport);
}

索引操作

查询索引是否存在

boolean exit = client.indices().exists(builder -> builder.index(TEST_INDEX)).value();

创建索引

if (!exit) {
    // 创建索引
    client.indices().create(builder -> builder.index(TEST_INDEX));
}

删除索引

client.indices().delete(builder -> builder.index(TEST_INDEX));

文档操作

删除文档

// 删除文档,批量操作
client.bulk(builder -> {
    for (int i = 4000; i < 4004; i++) {
        int finalI = i;
        BulkOperation operation = new BulkOperation.Builder().delete(d -> {
            // TEST_INDEX: 索引名称
            // id: 文档id
            d.index(TEST_INDEX).id(String.valueOf(finalI));
            return d;
        }).build();
        builder.operations(operation);
    }
    return builder;
});

新增文档

@Data
public class User implements Serializable {

    private Integer id;
    private String name;
    private Integer age;

    public User(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
}

// 数据准备
User zhang_san = new User(4000, "zhang san", 20);
User zhang_san_feng = new User(4001, "zhang san feng", 30);
User zhang_wu_ji = new User(4002, "zhang wu ji", 40);
User zhang_yi_feng = new User(4003, "zhang yi feng", 50);
List<User> userList = Arrays.asList(zhang_san, zhang_san_feng, zhang_wu_ji, zhang_yi_feng);

// 批量新增文档
client.bulk(builder -> {
    for (User user : userList) {
        BulkOperation operation = new BulkOperation.Builder().create(c -> {
            // TEST_INDEX: 索引名称
            // id: 文档id
            // document: 文档
            c.index(TEST_INDEX).id(user.getId().toString()).document(user);
            return c;
        }).build();
        builder.operations(operation);
    }
    return builder;
});

获取文档

Map userMap = client.get(builder -> {
    builder.index(TEST_INDEX).id("4000");
    return builder;
}, Map.class).source();

System.out.println(userMap);

修改文档

 // 修改文档
client.update(builder -> {
    User zhang_san_new = new User(4000, "zhang san new", 60);
    builder.index(TEST_INDEX).id("4000").doc(zhang_san_new);
    return builder;
}, Map.class);

删除文档

// 删除文档
client.delete(builder -> {
    builder.index(TEST_INDEX).id("4000");
    return builder;
});

条件查询

// 条件查询,查询结果用 Object 接收
List<Hit<Object>> hits = client.search(builder -> {
    builder
        // 要查询的索引
        .index(TEST_INDEX)
        // 排序
        .sort(sort())
        // 查询
        .query(query());

    return builder;
}, Object.class).hits().hits();

// 结果遍历
for (Hit<Object> hit : hits) {
    System.out.println(hit.source());
}

// 排序
private static List<SortOptions> sort() {
    List<SortOptions> sortOptionsList = new ArrayList<>();

    // 创建 SortOptions 对象, 排序字段: age, 排序方式: SortOrder.Asc
    SortOptions sortOptions = new SortOptions.Builder().field(builder -> builder.field("age").order(SortOrder.Asc)).build();

    // 多个排序字段 ...

    sortOptionsList.add(sortOptions);
    return sortOptionsList;
}

//条件查询
private static Query query() {

    // match 会分词查询
    Query matchQuery = new Query.Builder().match(builder -> {
        // 查询名字包含 zhang 的数据
        // 例如  zhang san, zhang san feng, zhang wu ji,zhang yi feng 可以被检索到
        builder.field("name").query("zhang");
        return builder;
    }).build();

    // matchPhrase 短语查询
    Query matchPhraseQuery = new Query.Builder().matchPhrase(builder -> {
        // 查询名字包含 "zhang san" 这个短语(两个词一定是连续,像zhang yi san是查不到的)
        // 例如 zhang san, zhang san feng可以被检索到,
        // 而zhang wu ji, zhang yi san 不可以被检索到
        builder.field("name").query("zhang san");
        return builder;
    }).build();

    // term 精确查询
    Query termQuery = new Query.Builder().term(builder -> {
        // zhang san 会被elasticsearch分词为zhang和san,
        // 当查询zhang san会被当一个整体查找,词库没有这个整体,会找不到数据
        // builder.field("name").value("zhang san");

        // 可以通过添加 .keyword 精确查找
        builder.field("name.keyword").value("zhang san");
        return builder;
    }).build();

    // 模糊查询
    Query wildcardQuery = new Query.Builder().wildcard(builder -> {
        builder.field("name").value("*zh*");
        return builder;
    }).build();

    // 范围查询
    Query rangeQuery = new Query.Builder().range(builder -> {
        builder.field("age").gt(JsonData.of(30));
        return builder;
    }).build();

    // 多个条件查询 BoolQuery
    // must: 条件必修满足,类似SQL AND
    // should: 条件或者满足,类似SQL OR
    // filter: 过滤结果, 类似stream流filter
    // mustNot: 条件必须不满足,类似SQL NOT
    BoolQuery boolQuery = new BoolQuery.Builder()
        //                .must(termQuery)
        //                .should()
        //                .filter()
        //                .mustNot()
        .build();

    return new Query.Builder().bool(boolQuery).build();
}

到了这里,关于elasticsearch-java客户端操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • ElasticSearch的客户端操作

    ElasticSearch的客户端操作 使用Kibana进行以下实验,进行Restful接口访问 索引库操作,完成对索引的增、删、查操作 “acknowledged” : true, 代表操作成功 “shards_acknowledged” : true, 代表分片操作成功 “index” : “shopping” 表示创建的索引库名称 注意:创建索引库的分片数默认5片,

    2024年02月12日
    浏览(57)
  • 【Elasticsearch学习笔记五】es常用的JAVA API、es整合SpringBoot项目中使用、利用JAVA代码操作es、RestHighLevelClient客户端对象

    目录 一、Maven项目集成Easticsearch 1)客户端对象 2)索引操作 3)文档操作 4)高级查询 二、springboot项目集成Spring Data操作Elasticsearch 1)pom文件 2)yaml 3)数据实体类 4)配置类 5)Dao数据访问对象 6)索引操作 7)文档操作 8)文档搜索 三、springboot项目集成bboss操作elasticsearch

    2023年04月09日
    浏览(51)
  • 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日
    浏览(35)
  • 袁庭新ES系列15节|Elasticsearch客户端基础操作

    上一章节我们介绍了搭建Elasticsearch集群相关的知识。那么又该如何来操作Elasticsearch集群呢?在ES官网中提供了各种语言的客户端,我们在项目开发过程中有多种Elasticsearch版本和连接客户端可以选择,那么他们有什么区别?这一章节袁老师带领大家来学习Elasticsearch客户端相关

    2024年04月25日
    浏览(51)
  • 干货 | Elasticsearch Java 客户端演进历史和选型指南

    Elasticsearch 官方提供了很多版本的 Java 客户端,包含但不限于: Transport 客户端 Java REST 客户端 Low Level REST 客户端 High Level REST 客户端 Java API 客户端 非官方的 Java 客户端,包含但不限于: Jest 客户端 BBoss 客户端 Spring Data Elasticsearch 客户端 ...... 写出来的就接近十款客户端! El

    2023年04月11日
    浏览(51)
  • 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日
    浏览(54)
  • HDFS之Java客户端操作

    Hadoop版本:Hadoop-3.1.3 Linux版本:CentOS7.5 IDE工具:IntelliJ IDEA(Windows环境下) HDFS的Java客户端操作也是入门Hadoop开发的学习重点 下载依赖 https://github.com/steveloughran/winutils 根据自己的Hadoop安装版本选择对应版本的依赖,如果需要更高版本的依赖,请从以下地址下载 https://github.

    2024年02月12日
    浏览(48)
  • Elasticsearch Java客户端和Spring data elasticsearch-Elasticsearch文章三

    https://www.elastic.co/cn/ 整合springboot看上一篇文章 一定要对应好版本,Elasticsearch 的不同版本变化是真大, https://docs.spring.io/spring-data/elasticsearch/docs/4.4.10/reference/html/ Springboot: 2.7.10 spring-data-elasticsearch: 4.4.10 spring-boot-starter-data-elasticsearch: 2.7.10 elasticsearch-java: 7.17.9 https://github.com/

    2024年02月14日
    浏览(43)
  • windows环境安装elasticsearch+kibana并完成JAVA客户端查询

    elasticsearch 官网下载比较慢,有时还打不开,可以通过https://elasticsearch.cn/download/下载,先找到对应的版本,最好使用迅雷下载,秒下的,我的下载速度可以达到40M/S 解压后点击 elasticsearch-7.10.0binelasticsearch.bat 运行成功后,输入http://120.0.0.1:9200,可以访问说明ES启动成功 点击

    2024年02月14日
    浏览(52)
  • ZooKeeper基础命令和Java客户端操作

    (1)Help (2)ls 使用 ls 命令来查看当前znode中所包含的内容 (3)ls2查看当前节点数据并能看到更新次数等数据 (4)stat查看节点状态 (5)set 1)设置节点的具体值 2)set 节点 value值 set /test atguigu (6)get 1)获得节点的值 2)get 节点 (7)create 1)普通创建 create /test demo001

    2024年02月10日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包