ES学习日记(十一)-------Java操作ES之基本操作

news2024/11/29 0:33:59

前言

此篇博客还是一些基础操作,没什么可写的,需要的同学直接抄作业进行测试就可以

上一节写了连接和测试新增操作,这一节写java操作ES的基本操作,也就是增删改查,在这里补充一点知识,我们之前用了指定的索引进行指定添加

有一个情况是,如果我们指定了一个不存在的索引时,他会创建一个新的索引,例如我们这个ik1是不存在的,执行添加后也可以添加进去,索引库会新增一个叫ik1的索引,如图

一、查询

注:查询时需要查询存在的索引,不存在会报错,提示not found

    /**
     * 查询测试
     */
    @Test
    public void testRetrieve() throws IOException {
        GetRequest getRequest = new GetRequest("ik","5");
        GetResponse response = client.get(getRequest,RequestOptions.DEFAULT);
        System.out.println(response);
    }

二、更新

忽略警告


    /**
     * 更新
     *
     * @throws IOException
     */
    @Test
    public void testUpdate() throws IOException {
        HashMap<String,Object> map = new HashMap<>();
        map.put("name","哈西布鲁根");
        map.put("content","拳皇99");
        UpdateRequest updateRequest = new UpdateRequest("ik","5").doc(map);
        UpdateResponse updateResponse =client.update(updateRequest,RequestOptions.DEFAULT);
        System.out.println(updateRequest);
    }

三、删除


    /**
     * 删除
     */
    @Test
    public void testDelete() throws IOException {
        DeleteRequest deleteRequest = new DeleteRequest("ik","5");
        DeleteResponse deleteResponse = client.delete(deleteRequest,RequestOptions.DEFAULT);
        System.out.println(deleteRequest);
    }

四、批量增删改

其实就是增加了一个容器BulkRequest,把所有操作放到了这个容器里,然后同意操作

为了查看效果,注释了删除

    /**
     * 批量增删改
     */
    @Test
    public void testCUD() throws IOException {
        BulkRequest request = new BulkRequest();
        /*
         * 增加IndexRequest
         * XContentType键值对
         */
        request.add(new IndexRequest("ik").id("5").source(XContentType.JSON,"name","罗翔","content","法外狂徒张三"));
        /*
         * 更新UpdateRequest
         */
        request.add(new UpdateRequest("ik","5").doc(XContentType.JSON,"name","罗翔","content","法外狂徒李四"));
        /*
         * 删除DeleteRequest
         */
//        request.add(new DeleteRequest("ik").id("5"));
        BulkResponse bulkResponse = client.bulk(request,RequestOptions.DEFAULT);
        System.out.println(bulkResponse.toString());
    }

五、查询

1.查询全部

查询全部,可变参数可指定多个索引,如果结果超过十条,默认返回十条

/**
     * 查询
     *
     * @throws IOException
     */
    @Test
    public void testQuery() throws IOException {
        //可以指定多个索引,用逗号隔开
        SearchRequest searchRequest = new SearchRequest("ik","shop");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //查询所有
        searchSourceBuilder.query(QueryBuilders.matchAllQuery());
        searchRequest.source(searchSourceBuilder);
        SearchResponse response = client.search(searchRequest,RequestOptions.DEFAULT);
        System.out.println(response);
    }

查询结果是一个JSON,转了一下格式,看着清晰一点,查出来的内容是不能直接使用的,所以还需要转换格式

取出我们想要的部分,图例说明更清晰一些

有三种方式,根据实际使用情况选择,详见注释

/**
     * 查询
     *
     * @throws IOException
     */
    @Test
    public void testQuery() throws IOException {
        //可以指定多个索引,用逗号隔开
        SearchRequest searchRequest = new SearchRequest("ik","shop");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //查询所有,如果结果超过10条,默认显示10条
        searchSourceBuilder.query(QueryBuilders.matchAllQuery());
        searchRequest.source(searchSourceBuilder);
        SearchResponse response = client.search(searchRequest,RequestOptions.DEFAULT);
        //调整结构,取出需要的部分
        long value = response.getHits().getTotalHits().value;
        System.out.println(response);
        if(0<value){
            SearchHit[] hits = response.getHits().getHits();
            for(SearchHit hit : hits){
                System.out.println(hit.getIndex());
                System.out.println(hit.getId());
                System.out.println(hit.getScore());
                //三种方式,根据实际使用情况选择
                System.out.println(hit.getSourceAsMap());
                System.out.println(hit.getSourceAsString());
                System.out.println(hit.getSourceRef());
                System.out.println("==========");
            }
        }
    }

2.按照条件查询

按照条件查询可以分为单字段单索引,单字段多索引,多字段单索引,多字段多索引,多个用逗号隔开就行,有点区别,但区别不大,详见代码注释

/**
     * 根据条件查询
     *
     * @throws IOException
     */
    @Test
    public void testQueryMatch() throws IOException {
        //可以指定多个索引,用逗号隔开
        SearchRequest searchRequest = new SearchRequest("ik","shop");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //单字段匹配-->字段对值
//        searchSourceBuilder.query(QueryBuilders.matchQuery("content","中国"));
        //多字段匹配-->值对多字段
        searchSourceBuilder.query(QueryBuilders.multiMatchQuery("中国","content","name"));
        searchRequest.source(searchSourceBuilder);
        SearchResponse response = client.search(searchRequest,RequestOptions.DEFAULT);
        //调整结构,取出需要的部分
        long value = response.getHits().getTotalHits().value;
        System.out.println(response);
        if(0<value){
            SearchHit[] hits = response.getHits().getHits();
            for(SearchHit hit : hits){
                System.out.println(hit.getIndex());
                System.out.println(hit.getId());
                System.out.println(hit.getScore());
                //三种方式,根据实际使用情况选择
                System.out.println(hit.getSourceAsMap());
                System.out.println(hit.getSourceAsString());
                System.out.println(hit.getSourceRef());
                System.out.println("==========");
            }
        }
    }

3.排序
  /**
     * 排序
     *
     * @throws IOException
     */
    @Test
    public void testQuerySortHighLevel() throws IOException {
        //可以指定多个索引,用逗号隔开
        SearchRequest searchRequest = new SearchRequest("ik","shop");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //多字段匹配-->值对多字段
        searchSourceBuilder.query(QueryBuilders.multiMatchQuery("中国","content","name"));

        //从第几位开始分几条,分别是索引下标,大小
        //分页查询默认查询倒序
        searchSourceBuilder.from(0).size(5);
//        //正序写法
//        searchSourceBuilder.sort(SortBuilders.scoreSort().order(SortOrder.ASC));
        /*
         * 指定字段排序
         * 注意不是数据库里面的字段,是es里面的字段
         * 默认正序,倒序.order(SortOrder.DESC))
         *
         * 指定字段后,分数排序失效
         */
        searchSourceBuilder.sort(SortBuilders.fieldSort("id"));

        searchRequest.source(searchSourceBuilder);
        SearchResponse response = client.search(searchRequest,RequestOptions.DEFAULT);
        //调整结构,取出需要的部分
        long value = response.getHits().getTotalHits().value;
        System.out.println(response);
        if(0<value){
            SearchHit[] hits = response.getHits().getHits();
            for(SearchHit hit : hits){
                System.out.println(hit.getIndex());
                System.out.println(hit.getId());
                System.out.println(hit.getScore());
                //三种方式,根据实际使用情况选择
                System.out.println(hit.getSourceAsMap());
                System.out.println(hit.getSourceAsString());
                System.out.println(hit.getSourceRef());
                System.out.println("==========");
            }
        }
    }

4.高亮
/**
     * 排序
     *
     * @throws IOException
     */
    @Test
    public void testQuerySortHighLevel() throws IOException {
        //可以指定多个索引,用逗号隔开
        SearchRequest searchRequest = new SearchRequest("ik","shop");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //多字段匹配-->值对多字段
        searchSourceBuilder.query(QueryBuilders.multiMatchQuery("中国","content","name"));

        //从第几位开始分几条,分别是索引下标,大小
        //分页查询默认查询倒序
        searchSourceBuilder.from(0).size(5);
//        //正序写法
        searchSourceBuilder.sort(SortBuilders.scoreSort().order(SortOrder.ASC));
        /*
         * 指定字段排序
         * 注意不是数据库里面的字段,是es里面的字段
         * 默认正序,倒序.order(SortOrder.DESC))
         *
         * 指定字段后,分数排序失效
         */
//        searchSourceBuilder.sort(SortBuilders.fieldSort("id"));

        //高亮
        HighlightBuilder highlightBuilder = new HighlightBuilder().field("content").preTags("<p style='color:red'>").postTags("</>");
        searchSourceBuilder.highlighter(highlightBuilder);

        searchRequest.source(searchSourceBuilder);
        SearchResponse response = client.search(searchRequest,RequestOptions.DEFAULT);
        //调整结构,取出需要的部分
        long value = response.getHits().getTotalHits().value;
        System.out.println(response);
        if(0<value){
            SearchHit[] hits = response.getHits().getHits();
            for(SearchHit hit : hits){
                System.out.println(hit.getIndex());
                System.out.println(hit.getId());
                System.out.println(hit.getScore());
                //三种方式,根据实际使用情况选择
                System.out.println(hit.getSourceAsMap());
                System.out.println(hit.getSourceAsString());
                System.out.println(hit.getSourceRef());
                //显示高亮.fragments取文本
                System.out.println("hl: "+String.valueOf(hit.getHighlightFields().get("content").fragments()[0]));
                System.out.println("==========");
            }
        }
    }

写在最后

一些基础用法,详见注释,都能用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1576723.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git提交代码时报错,提不了

问题 今天在换了新电脑&#xff0c;提交代码时报错 ✖ eslint --fix found some errors. Please fix them and try committing again. ✖ 21 problems (20 errors, 1 warning) husky > pre-commit hook failed (add --no-verify to bypass) 解决 通过 --no-verify 解决&…

✌2024/4/3—力扣—最长回文子串

代码实现&#xff1a; 解法一&#xff1a;动态规划——回文子串 char* longestPalindrome(char *s) {int n strlen(s);if (s NULL || n 0 || n 1) {return s;}int dp[n][n];memset(dp, 0, sizeof(dp));for (int i n - 1; i > 0; i--) { // 从下到上for (int j i; j &l…

C语言面试题之判定字符是否唯一

判定字符是否唯一 实例要求 实现一个算法&#xff0c;确定一个字符串 s 的所有字符是否全都不同 实例分析 1、使用一个大小为 256 的bool数组 charSet 来记录字符是否出现过&#xff1b;2、遍历字符串时&#xff0c;如果字符已经在数组中标记过&#xff0c;则返回 false&a…

SpringCloud Alibaba Sentinel 创建流控规则

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第十四篇&#xff0c;即介绍 SpringCloud Alibaba Sentinel 创建流控规则。 二、基本介绍 我们在 senti…

腾讯视频号新玩法,有人已经“遥遥领先”了~

我是王路飞。 抖音的流量红利让用户看到了新的变现方式。 短视频、开直播、开店铺卖货、图文带货等等&#xff0c;都是依托于抖音这个平台去发展起来的。 而抖音的巨大成功&#xff0c;被吸引到的还有互联网行业巨头&#xff0c;比如腾讯。 而腾讯视频号的上线就表明了&…

智能网联汽车自动驾驶数据记录系统DSSAD数据元素

目录 第一章 数据元素分级 第二章 数据元素分类 第三章 数据元素基本信息表 表1 车辆及自动驾驶数据记录系统基本信息 表2 车辆状态及动态信息 表3 自动驾驶系统运行信息 表4 行车环境信息 表5 驾驶员操作及状态信息 第一章 数据元素分级 自动驾驶数据记录系统记录的数…

git Failed to connect to 你的网址 port 8282: Timed out

git Failed to connect to 你的网址 port 8282: Timed out 出现这个问题的原因是&#xff1a;原来的仓库换了网址&#xff0c;原版网址不可用了。 解决方法如下&#xff1a; 方法一&#xff1a;查看git用户配置是否有如下配置 http.proxyhttp://xxx https.proxyhttp://xxx如果…

DIY可视化UniApp表格组件

表格组件在移动端的用处非常广泛&#xff0c;特别是在那些需要展示结构化数据、进行比较分析或提供详细信息的场景中。数据展示与整理&#xff1a;表格是展示结构化数据的理想方式&#xff0c;特别是在需要展示多列和多行数据时。通过表格&#xff0c;用户可以轻松浏览和理解数…

2024新版PHP在线客服系统多商户AI智能在线客服系统源码机器人自动回复即时通讯聊天系统源码PC+H5

搭建环境&#xff1a; 服务器 CPU 2核心 ↑ 运存 2G ↑ 宽带 5M ↑ 服务器操作系统 Linux Centos7.6-7.9 ↑ 运行环境&#xff1a; 宝塔面板 Nginx1.18- 1.22 PHP 7.1-7.3 MYSQL 5.6 -5.7 朵米客服系统是一款全功能的客户服务解决方案&#xff0c;提供多渠道支持…

深度学习理论基础(七)Transformer编码器和解码器

学习目录&#xff1a; 深度学习理论基础&#xff08;一&#xff09;Python及Torch基础篇 深度学习理论基础&#xff08;二&#xff09;深度神经网络DNN 深度学习理论基础&#xff08;三&#xff09;封装数据集及手写数字识别 深度学习理论基础&#xff08;四&#xff09;Parse…

能不能换DB吗?--抽象工厂模式

1.1 就不能不换DB吗&#xff1f; 都是换数据库惹的祸。 "我们团队前段时间用.net的C#来开发好一个项目&#xff0c;是给一家企业做的电子商务网站&#xff0c;是用SQL Server作为数据库的&#xff0c;应该说上线后除了开始有些小问题&#xff0c;基本都还可以。而后&#…

婴儿洗衣机买几公斤的合适?四大黑马婴儿洗衣机强势来袭

选择适合婴儿使用的洗衣机&#xff0c;是每个家长都关心的问题。在选择的时候&#xff0c;我们需要考虑一些因素&#xff0c;比如安全性、易操作性和洗涤效果等。同时&#xff0c;也要根据婴儿的年龄和需求来选择合适的洗衣机。婴儿洗衣机的出现&#xff0c;为宝妈们带来了极大…

2023年下半年中级软件设计师上午真题及答案解析

01 02 03 04 05 06 07 08 09 10 篇幅有限&#xff0c;私我获取免费完整 pdf文件

如何魔改 diffusers 中的 pipelines

如何魔改 diffusers 中的 pipelines 整个 Stable Diffusion 及其 pipeline 长得就很适合 hack 的样子。不管是通过简单地调整采样过程中的一些参数&#xff0c;还是直接魔改 pipeline 内部甚至 UNet 内部的 Attention&#xff0c;都可以实现很多有趣的功能或采样生图结果。 本…

JVM 全景图

今天我重新复习了一下 jvm 的一些知识点。我以前觉得 jvm 的知识点很多很碎&#xff0c;而且记起来很困难&#xff0c;但是今天我重新复习了一下&#xff0c;对这些知识点进行了简单的梳理之后&#xff0c;产生了不一样的看法。虽然 jvm 的知识点很碎&#xff0c;但是如果你真的…

创建型模式--1.单例模式【巴基速递】

1. 巴基的订单 在海贼世界中&#xff0c;巴基速递是巴基依靠手下强大的越狱犯兵力&#xff0c;组建的集团海贼派遣公司&#xff0c;它的主要业务是向世界有需要的地方输送雇佣兵&#xff08;其实是不干好事儿&#xff09;。 自从从特拉法尔加罗和路飞同盟击败了堂吉诃德家族 &…

系统监测工具-tcpdump的使用

一个简单的tcpdump抓包过程。主要抓包观察三次握手&#xff0c;四次挥手的数据包 有两个程序&#xff1a;客户端和服务器两个程序 服务器端的ip地址使用的是回环地址127.0.0.1 端口号使用的是6000 tcpdump -i 指定用哪个网卡等&#xff0c;dstip地址端口指定抓取目的地址…

ctfshow web入门 文件包含 web151--web161

web151 打算用bp改文件形式(可能没操作好)我重新试了一下抓不到 文件上传不成功 改网页前端 鼠标右键&#xff08;检查&#xff09;&#xff0c;把png改为php访问&#xff0c;执行命令 我上传的马是<?php eval($_POST[a]);?> 查看 web152 上传马 把Content-Type改为…

基于大模型的态势认知智能体

源自&#xff1a;指挥控制与仿真 作者&#xff1a;孙怡峰, 廖树范, 吴疆 李福林 “人工智能技术与咨询” 发布 摘要 针对战场态势信息众多、变化趋势认知困难的问题,提出基于大模型的态势认知智能体框架和智能态势认知推演方法。从认知概念出发,结合智能体的抽象性、具…

基于单片机收音机调幅系统设计仿真源码

**单片机设计介绍&#xff0c;基于单片机收音机调幅系统设计仿真源码 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机收音机调幅系统设计的仿真源码&#xff0c;主要实现了通过单片机控制调幅收音机的核心功能。以下是…