java操作 elasticsearch8.0 doc文档<二>

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

本文所有代码在文章最后

本文所有代码在文章最后

创建doc文档

如何连接请看上一篇文章

https://blog.csdn.net/u013979493/article/details/123122242?spm=1001.2014.3001.5502

User user = new User("10002", "lisi", 20, "男");
IndexResponse indexResponse = client.index(
              x -> x.index("user").id(user.getId()).document(user));

修改doc自定义属性

User user = new User();
//修改什么属性就set什么值
user.setAge(101);
UpdateResponse<User> userUpdateResponse = client.update(
                     x -> x.index("user").id("10002").doc(user), User.class);

获取doc信息

GetResponse<User> getResponse = client.get(x -> x
	.index("user")
	.id("10002")
, User.class);

删除doc

client.delete(x -> x.index("user").id("10002"));

批量添加doc

//创建user列表
List<User> users = new ArrayList<>();
users.add(new User("15", "张三", 10, "女"));
users.add(new User("16", "张四", 10, "女"));
users.add(new User("17", "张五六", 11, "女"));
users.add(new User("18", "张三四", 12, "女"));
users.add(new User("19", "张三五", 13, "女"));
users.add(new User("20", "张三六七", 14, "女"));
users.add(new User("21", "张三1", 15, "女"));
//创建BulkOperation列表准备批量插入doc
List<BulkOperation> bulkOperations = new ArrayList<>();
//将user中id作为es id,也可不指定id es会自动生成id
users.forEach(a -> bulkOperations.add(BulkOperation.of(b -> b.index(c -> c.id(a.getId()).document(a)))));
client.bulk(x ->x.index("user").operations(bulkOperations));

批量删除doc

List<String> strings = new ArrayList<>();
strings.add("1");
strings.add("2");
strings.add("3");
strings.add("4");
strings.add("5");
strings.add("6");
strings.add("7");
List<BulkOperation> bulkOperations = new ArrayList<>();
strings.forEach(a -> bulkOperations.add(BulkOperation.of(b -> b.delete(c -> c.id(a)))));
client.bulk(x ->x.index("user").operations(bulkOperations));

批量更新doc

与添加删除同理

查询user索引所有数据

SearchResponse<User> searchResponse = client.search(a -> a.index("user"), User.class);
searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));

条件查询 查询age为15的数据

earchResponse<User> searchResponse = client
                    .search(a -> a
                            .index("user")
                            .query(b -> b
                                    .term(c -> c
                                            .field("age")
                                            .value(d -> d
                                                    .longValue(15)
                                            )
                                    )
                            ), User.class);
searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));

分页查询 排序 过滤字段

SearchResponse<User> searchResponse = client
                    .search(a -> a
                            .index("user")
                            //从第0条到第4条
                            .from(0)
                            .size(5)
                            //按年龄降序排序
                            .sort(b -> b
                                    .field(c -> c
                                            .field("age")
                                            .order(SortOrder.Desc)
                                    )
                            )
                            .source(c -> c
                                    .filter(d -> d
                                            //不包含字段
                                            .excludes("id", "age")
                                            //包含字段
                                            .includes("name")
                                    )
                            ), User.class);
searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));

组合查询

SearchResponse<User> searchResponse = client
                    .search(a -> a
                            .index("user")
                            .query(b -> b
                                    .bool(c -> c
                                    		//必须不满足某些条件
                                            .mustNot(d -> d.match(e -> e.field("sex").query(f -> f.stringValue("男"))))
                                            //可同时满足某些条件
                                            .should(d -> d.match(e -> e.field("age").query(f -> f.longValue(10))))
                                            .should(d -> d.match(e -> e.field("age").query(f -> f.longValue(12))))
                                    )
                            ), User.class);
searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));

范围查询

from to查询

SearchResponse<User> searchResponse = client
                    .search(a -> a
                            .index("user")
                            .query(b -> b
                                    .range(c -> c.field("age").from("10").to("12"))
                            ), User.class);
            searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));

大于小于查询

SearchResponse<User> searchResponse = client
                    .search(a -> a
                            .index("user")
                            .query(b -> b
                                    //小于等于
//                                    .range(c -> c.field("age").lte(JsonData.of("13")))
                                    //小于
//                                    .range(c -> c.field("age").lt(JsonData.of("13")))
                                    //大于等于
//                                    .range(c -> c.field("age").gte(JsonData.of("13")))
                                    //大于
//                                    .range(c -> c.field("age").gt(JsonData.of("13")))
                                    //范围
                                    .range(c -> c.field("age").from("10").to("13"))

                            )
                            .sort(b -> b.field(c -> c.field("age").order(SortOrder.Asc)))
                            //经测试,若不指定size则只会返回前十条数据,此处这是size是想返回所有数据,如有更好的方法清指教
                            .size(1000), User.class);
searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));

模糊查询 高亮显示

SearchResponse<User> searchResponse = client.search(_0 -> _0
                    .query(_1 -> _1
                            .fuzzy(_2 -> _2
                                    .field("name")
                                    //最大偏移量,意为最多有能有几个不符合的
                                    .fuzziness("1")
                                    //最大查询数量
//                                    .maxExpansions(5)
                                    .value(_3 -> _3
                                            .stringValue("张四")
                                    )
                            )
                    )
                    //高亮
                    .highlight(_4 -> _4
                            .fields("name", _5 -> _5
                                    .preTags("<font color='red'>")
                                    .postTags("</font>")
                            )
                    ), User.class);
searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));

聚合操作

SearchResponse<Map> search = client
                    .search(_0 -> _0
                    		//按年龄进行分组
                            .aggregations("ageGroup", _1 -> _1
                                    .terms(_2 -> _2
                                            .field("age")
                                    )
                            ), Map.class);
System.out.println(search);

本文所有方法本人以测试正常使用,如有错误请指正,一起讨论
以下为本文所有代码

User实体类

public class User {
    private String id;
    private String name;
    private int age;
    private String sex;

    public User() {
    }

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

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

es操作

public class ESClientDemo {

    private static final String clusterNodes = "127.0.0.1:9201";

    private static final String account = "elastic";

    private static final String passWord = "D4ibOD8mtcItd_p_FGUO";

    public static ElasticsearchClient client;

    public static RestClientBuilder builder;

    public static RestClient restClient;

    public static ElasticsearchTransport transport;

    //有密码登录
    public static void main(String[] args) {
        try {
            HttpHost[] httpHosts = Arrays.stream(clusterNodes.split(",")).map(x -> {
                String[] hostInfo = x.split(":");
                return new HttpHost(hostInfo[0], Integer.parseInt(hostInfo[1]));
            }).toArray(HttpHost[]::new);

            final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
            //设置账号密码
            credentialsProvider.setCredentials(
                    AuthScope.ANY, new UsernamePasswordCredentials(account, passWord));

            builder = RestClient.builder(httpHosts)
                    .setHttpClientConfigCallback(httpClientBuilder ->
                            httpClientBuilder
                                    .setDefaultCredentialsProvider(credentialsProvider));

            // Create the low-level client
            restClient = builder.build();
            // Create the transport with a Jackson mapper
            transport = new RestClientTransport(
                    restClient, new JacksonJsonpMapper());
            // And create the API client
            client = new ElasticsearchClient(transport);

//            Boolean acknowledged = client.indices().create(c -> c.index("user")).acknowledged();
//            System.out.println("创建索引: " + (Boolean.TRUE.equals(acknowledged) ? "成功" : "失败"));
//            GetIndexResponse getIndexResponse = client.indices().get(c -> c.index("user"));
//            System.out.println("获取索引 user 响应: " + getIndexResponse);
//            DeleteIndexResponse deleteIndexResponse = client.indices().delete(c -> c.index("user"));
//            System.out.println("删除索引 user 响应: " + deleteIndexResponse);

            //创建doc
//            User user = new User("lisi", 20, "男");
//            IndexResponse indexResponse = client.index(
//                            x -> x.index("user").id("10002").document(user));
            //修改doc部分属性
//            User user = new User();
//            user.setAge(101);
//            UpdateResponse<User> userUpdateResponse = client.update(
//                            x -> x.index("user").id("10002").doc(user), User.class);
            //获取doc信息
//            GetResponse<User> getResponse = client.get(x -> x.index("user").id("10002"), User.class);
            //删除doc
//            client.delete(x -> x.index("user").id("10002"));

            //批量添加doc
            /*List<User> users = new ArrayList<>();
            users.add(new User("15", "张三", 10, "女"));
            users.add(new User("16", "张四", 10, "女"));
            users.add(new User("17", "张五六", 11, "女"));
            users.add(new User("18", "张三四", 12, "女"));
            users.add(new User("19", "张三五", 13, "女"));
            users.add(new User("20", "张三六七", 14, "女"));
            users.add(new User("21", "张三1", 15, "女"));
            List<BulkOperation> bulkOperations = new ArrayList<>();
            users.forEach(a -> bulkOperations.add(BulkOperation.of(b -> b.index(c -> c.id(a.getId()).document(a)))));
            client.bulk(x ->x.index("user").operations(bulkOperations));*/

            //批量删除doc
            /*List<String> strings = new ArrayList<>();
            strings.add("1");
            strings.add("2");
            strings.add("3");
            strings.add("4");
            strings.add("5");
            strings.add("6");
            strings.add("7");
            List<BulkOperation> bulkOperations = new ArrayList<>();
            strings.forEach(a -> bulkOperations.add(BulkOperation.of(b -> b.delete(c -> c.id(a)))));
            client.bulk(x ->x.index("user").operations(bulkOperations));*/

            //查询user索引所有数据
            /*SearchResponse<User> searchResponse = client.search(a -> a.index("user"), User.class);
            searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));*/

            //条件查询
            /*SearchResponse<User> searchResponse = client
                    .search(a -> a
                            .index("user")
                            .query(b -> b
                                    .term(c -> c
                                            .field("age")
                                            .value(d -> d
                                                    .longValue(15)
                                            )
                                    )
                            ), User.class);
            searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));*/

            //分页查询 排序 过滤字段
            /*SearchResponse<User> searchResponse = client
                    .search(a -> a
                            .index("user")
                            .from(0)
                            .size(5)
                            .sort(b -> b
                                    .field(c -> c
                                            .field("age")
                                            .order(SortOrder.Desc)
                                    )
                            )
                            .source(c -> c
                                    .filter(d -> d
                                            //不包含字段
                                            .excludes("id", "age")
                                            //包含字段
                                            .includes("name")
                                    )
                            ), User.class);
            searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));*/

            //组合查询
            /*SearchResponse<User> searchResponse = client
                    .search(a -> a
                            .index("user")
                            .query(b -> b
                                    .bool(c -> c
                                            .mustNot(d -> d.match(e -> e.field("sex").query(f -> f.stringValue("男"))))
                                            .should(d -> d.match(e -> e.field("age").query(f -> f.longValue(10))))
                                            .should(d -> d.match(e -> e.field("age").query(f -> f.longValue(12))))
                                    )
                            ), User.class);
            searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));*/

            //范围查询
            /*SearchResponse<User> searchResponse = client
                    .search(a -> a
                            .index("user")
                            .query(b -> b
                                    .range(c -> c.field("age").from("10").to("12"))
                            ), User.class);
            searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));*/
            /*SearchResponse<User> searchResponse = client
                    .search(a -> a
                            .index("user")
                            .query(b -> b
                                    //小于等于
//                                    .range(c -> c.field("age").lte(JsonData.of("13")))
                                    //小于
//                                    .range(c -> c.field("age").lt(JsonData.of("13")))
                                    //大于等于
//                                    .range(c -> c.field("age").gte(JsonData.of("13")))
                                    //大于
//                                    .range(c -> c.field("age").gt(JsonData.of("13")))
                                    //范围
                                    .range(c -> c.field("age").from("10").to("13"))

                            )
                            .sort(b -> b.field(c -> c.field("age").order(SortOrder.Asc)))
                            .size(999999999), User.class);
            searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));*/

            //模糊查询 高亮显示
            /*SearchResponse<User> searchResponse = client.search(_0 -> _0
                    .query(_1 -> _1
                            .fuzzy(_2 -> _2
                                    .field("name")
                                    //最大偏移量
                                    .fuzziness("1")
                                    //最大查询数量
//                                    .maxExpansions(5)
                                    .value(_3 -> _3
                                            .stringValue("张四")
                                    )
                            )
                    )
                    .highlight(_4 -> _4
                            .fields("name", _5 -> _5
                                    .preTags("<font color='red'>")
                                    .postTags("</font>")
                            )
                    ), User.class);
            searchResponse.hits().hits().forEach(x -> System.out.println(x.source()));*/

            //分组操作
            /*SearchResponse<Map> search = client
                    .search(_0 -> _0
                            .aggregations("ageGroup", _1 -> _1
                                    .terms(_2 -> _2
                                            .field("age")
                                    )
                            ), Map.class);
            System.out.println(search);*/
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                client.shutdown();
                transport.close();
                restClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

制作不易,请尊重作者的劳动成果文章来源地址https://www.toymoban.com/news/detail-410459.html

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

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

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

相关文章

  • Elasticsearch_分词器、搜索文档以及原生JAVA操作

    Elasticsearch_分词器、搜索文档以及原生JAVA操作

    ES文档的数据拆分成一个个有完整含义的,并将与文档对应,这样就可以通过查询文档。要想正确的分词,需要选择合适的分词器。 standard analyzer:Elasticsearch的默认分词器,根据空格和标点符号对应英文进行分词,会进行单词的大小写转换。 默认分词器是

    2024年02月03日
    浏览(11)
  • SpringBoot + ElasticSearch8.4.3 实现简单CRUD、批量操作
  • Elasticsearch8.8.0 SpringBoot实战操作各种案例(索引操作、聚合、复杂查询、嵌套等)

    Elasticsearch8.8.0 全网最新版教程 从入门到精通 通俗易懂 引入依赖 添加配置文件 application.yaml 导入ca证书到项目中 从任意一个es容器中,拷贝证书到resources目录下 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EXytUrDp-1691330960034)(media/16912196423122/16

    2024年02月13日
    浏览(14)
  • 最新Elasticsearch8.4.3 + Kibana8.4.3在云服务器Centos7.9安装部署(参考官方文档)

    最新Elasticsearch8.4.3 + Kibana8.4.3在云服务器Centos7.9安装部署(参考官方文档)

      最近笔者学习Elasticsearch,官方最新稳定版为 Elasticsearch-8.4.3,想在云服务器上Centos7.9搭建。搭建之路坑多路少啊(指网上的博文教程五花八门,基本都是ES7版本居多,ES8有少数,各种配置参数一头雾水,细节不多说,照搬了踩坑跌得头破血流),对小菜的我来说,简直要

    2024年02月02日
    浏览(19)
  • 【ElasticSearch】基于 Java 客户端 RestClient 实现对 ElasticSearch 索引库、文档的增删改查操作,以及文档的批量导入

    【ElasticSearch】基于 Java 客户端 RestClient 实现对 ElasticSearch 索引库、文档的增删改查操作,以及文档的批量导入

    ElasticSearch 官方提供了各种不同语言的客户端,用来操作 ES。这些客户端的本质就是组装 DSL 语句,通过 HTTP 请求发送给 ES 服务器。 官方文档地址:https://www.elastic.co/guide/en/elasticsearch/client/index.html。 在本文中,我们将着重介绍 ElasticSearch Java 客户端中的 RestClient,并演示如何

    2024年02月08日
    浏览(16)
  • java(springboot)对接elasticsearch8+

    注:jackson包es只用到了databind,之所以全部引用是因为actuator用到了其他,只升级一个会 导致版本冲突 注:因为没有用springboot自身的es插件所以健康检查检测不到es状态,关闭es检测 上边创建索引是定制的加了特殊mapping,正常这样

    2024年02月16日
    浏览(12)
  • Elasticsearch8.X与java调用

    Elasticsearch8.X与java调用

    1、ES增删改查操作 https://blog.csdn.net/UbuntuTouch/article/details/123839857 https://huaweicloud.csdn.net/637ef6b7df016f70ae4cac57.html 2、java与ES8相关maven依赖 https://blog.csdn.net/boling_cavalry/article/details/125351161 3、kibana下载数据 3、kibana相关操作

    2024年02月07日
    浏览(11)
  • 【SpringBoot笔记28】SpringBoot集成ES数据库之操作doc文档(创建、更新、删除、查询)

    这篇文章,主要介绍SpringBoot集成ES数据库之操作doc文档(创建、更新、删除、查询)。 目录 一、SpringBoot操作ES文档数据 1.1、创建文档 1.2、更新文档 1.3、删除文档

    2024年02月08日
    浏览(17)
  • Java封装Elasticsearch8常用接口方法(一)

    正文内容均以elasticsearch8.1版本为例,小版本差距不大,可直接使用,后续均以es8代替elasticsearch8.1 elastic官网文档:https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/8.1/connecting.html 连接池基于commons.pool2所写,网上已存在很多相关内容,仅针对es8进行微调 EsClientPoolFactory.ja

    2024年02月12日
    浏览(8)
  • [elastic 8.x]java客户端连接elasticsearch与操作索引与文档

    为了方便演示,我关闭了elasticsearch的安全验证,带安全验证的初始化方式将在最后专门介绍 其中,HotelDoc是一个实体类 带安全验证的连接有点复杂,将下列代码中CA证书的位置改为实际所在的位置就行了。 password为elastic的密码,可以在我的另一篇文章中查看密码的重置方式

    2024年04月11日
    浏览(19)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包