elasticsearch的学习(二):Java api操作elasticsearch

news2024/9/25 7:24:29

简介

使用Java api操作elasticsearch

创建maven项目

在这里插入图片描述

pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>elasticsearchTest</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>elasticsearchTest</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.elasticsearch</groupId>
      <artifactId>elasticsearch</artifactId>
      <version>7.8.0</version>
    </dependency>
    <!-- elasticsearch 的客户端 -->
    <dependency>
      <groupId>org.elasticsearch.client</groupId>
      <artifactId>elasticsearch-rest-high-level-client</artifactId>
      <version>7.8.0</version>
    </dependency>
    <!-- elasticsearch 依赖 2.x 的 log4j -->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.8.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.8.2</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.9</version>
    </dependency>
    <!-- junit 单元测试 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>
  </dependencies>
</project>

创建索引

package org.christ.es;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import java.io.IOException;

public class elasticSearchTest {
    public static void main(String[] args) throws IOException {
        //es客户端
        RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost",9200,"http"))
        );
        //创建索引
        CreateIndexRequest request = new CreateIndexRequest("user");
        CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
       //响应状态
        boolean acknowledged = createIndexResponse.isAcknowledged();
        System.out.println("操作是否成功:"+ acknowledged);
        //关闭es客户端
        restHighLevelClient.close();
    }
}
验证

使用postman发送get请求:http://localhost:9200/_cat/indices?v
在这里插入图片描述

查询索引

       GetIndexRequest request = new GetIndexRequest("user");
        GetIndexResponse getIndexResponse = restHighLevelClient.indices().get(request, RequestOptions.DEFAULT);
        System.out.println(getIndexResponse.getMappings());
        System.out.println(getIndexResponse.getAliases());
        System.out.println(getIndexResponse.getSettings());

在这里插入图片描述

删除索引

        DeleteIndexRequest request = new DeleteIndexRequest("user");
        AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println(delete.isAcknowledged());

在这里插入图片描述

添加数据

创建user类

在这里插入图片描述


```java
package org.christ.pojo;

public class user {
    private String name;
    private String sex;
    private Integer age;

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

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

    public Integer getAge() {
        return age;
    }

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

插入数据
        //插入数据
        IndexRequest indexRequest = new IndexRequest();
        indexRequest.index("user").id("1");
        user user = new user();
        user.setName("christ");
        user.setSex("man");
        user.setAge(20);
        //转换成json
        ObjectMapper objectMapper = new ObjectMapper();
        String s = objectMapper.writeValueAsString(user);
        indexRequest.source(s, XContentType.JSON);
        
        IndexResponse index = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
        System.out.println(index.getResult());

在这里插入图片描述

验证

postman发送get请求:http://localhost:9200/user/_doc/1
在这里插入图片描述

修改数据

        UpdateRequest updateRequest = new UpdateRequest();
        updateRequest.index("user").id("1");
        updateRequest.doc(XContentType.JSON,"sex","superman");
        UpdateResponse update = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println(update.getResult());

在这里插入图片描述

验证

postman发送get请求:http://localhost:9200/user/_doc/1
在这里插入图片描述

查询数据

        GetRequest getRequest = new GetRequest();
        getRequest.index("user").id("1");
        GetResponse documentFields = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
        System.out.println(documentFields.getSourceAsString());

在这里插入图片描述

删除数据

        DeleteRequest deleteRequest = new DeleteRequest();
        deleteRequest.index("user").id("1");
        DeleteResponse delete = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
        System.out.println(delete.status());

在这里插入图片描述

批量插入数据

        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.add(new IndexRequest().index("user").id("2").source(XContentType.JSON,"name","jack"));
        bulkRequest.add(new IndexRequest().index("user").id("3").source(XContentType.JSON,"name","john"));
        BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulk.getItems());

在这里插入图片描述

批量删除数据

        //批量删除数据
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.add(new DeleteRequest().index("user").id("2"));
        bulkRequest.add(new DeleteRequest().index("user").id("3"));
        BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulk);
验证

postman发送get请求:http://localhost:9200/user/_search
在这里插入图片描述

全量查询

 SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices("user");
        searchRequest.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        System.out.println(hits);
        for (SearchHit h:hits) {
            System.out.println(h.getSourceAsString());
        }

在这里插入图片描述

条件查询

        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices("user");
        searchRequest.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("sex","girl")));
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        for (SearchHit h:hits) {
            System.out.println(h.getSourceAsString());
        }

和全量查询的区别是:

searchRequest.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("sex","girl")));

QueryBuilders.matchAllQuery()换成了有条件的QueryBuilders.termQuery(“sex”,“girl”)
在这里插入图片描述

分页查询

 SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices("user");
        //SearchSourceBuilder提取出来
        SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        //第1页,展示两条数据
        query.from(0);
        query.size(2);
        searchRequest.source(query);
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        System.out.println(hits);
        for (SearchHit h:hits) {
            System.out.println(h.getSourceAsString());
        }

把全量查询中的searchRequest.source()括号中的条件提取出来,设置from和size属性。

排序查询

        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices("user");
        SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        query.sort("age", SortOrder.DESC);
        searchRequest.source(query);
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        System.out.println(hits);
        for (SearchHit h:hits) {
            System.out.println(h.getSourceAsString());
        }

把全量查询中的searchRequest.source()括号中的条件提取出来,设置sort属性。
在这里插入图片描述

查询过滤字段

 SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices("user");
        SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        String[] excludes={};
        String[] includes={"name"};
        query.fetchSource(includes,excludes);
        searchRequest.source(query);
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        System.out.println(hits);
        for (SearchHit h:hits) {
            System.out.println(h.getSourceAsString());
        }

SearchSourceBuilder 构建条件的时候,有一个fetchSource()方法,第一个参数就是包含哪些字段,第二个参数就是排除哪些字段。
在这里插入图片描述

条件查询

        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices("user");

        SearchSourceBuilder query = new SearchSourceBuilder();
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//        boolQueryBuilder.should(QueryBuilders.matchQuery("age","23"));
//        boolQueryBuilder.should(QueryBuilders.matchQuery("age","18"));
        boolQueryBuilder.must(QueryBuilders.matchQuery("name","christ"));
        query.query(boolQueryBuilder);
        searchRequest.source(query);
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        System.out.println(hits);
        for (SearchHit h:hits) {
            System.out.println(h.getSourceAsString());
        }

在这里插入图片描述

范围查询

        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices("user");

        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        RangeQueryBuilder age = QueryBuilders.rangeQuery("age");
        age.gt(20);
        searchSourceBuilder.query(age);
        searchRequest.source(searchSourceBuilder);
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        System.out.println(hits);
        for (SearchHit h:hits) {
            System.out.println(h.getSourceAsString());
        }

在这里插入图片描述

模糊查询

        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices("user");

        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //name字符有一个不同也可以查出来
        searchSourceBuilder.query(QueryBuilders.fuzzyQuery("name","chris").fuzziness(Fuzziness.ONE));
        searchRequest.source(searchSourceBuilder);
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        System.out.println(hits);
        for (SearchHit h:hits) {
            System.out.println(h.getSourceAsString());
        }

在这里插入图片描述

聚合查询

查询最大值
        //聚合查询
        SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices("user");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        MaxAggregationBuilder field = AggregationBuilders.max("maxAge").field("age");

        searchSourceBuilder.aggregation(field);
        searchRequest.source(searchSourceBuilder);


        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println(search);

在这里插入图片描述

分组查询
       SearchRequest searchRequest = new SearchRequest();
        searchRequest.indices("user");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        TermsAggregationBuilder field = AggregationBuilders.terms("groupAge").field("age");

        searchSourceBuilder.aggregation(field);
        searchRequest.source(searchSourceBuilder);


        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println(search);

在这里插入图片描述

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

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

相关文章

通过率100%!讯方技术河南经贸职业学院华为云计算HCIE订单班取得阶段性成果!

近日&#xff0c;由讯方技术与河南经贸职业学院计算机工程学院联合打造的华为云计算HCIE订单班传来喜讯。在该订单班中&#xff0c;首批参与HCIE实验考试的9名学生凭借扎实的专业知识和优秀的技能水平&#xff0c;全员顺利通过实验考试&#xff0c;通过率达到100%&#xff0c;体…

yolov8 剪枝

yolov8n 初始&#xff1a; YOLOv8n summary (fused): 185 layers, 3151904 parameters, 31936 gradients, 8.7 GFLOPs

正信晟锦:怎么追回欠债多年的钱

在这个世界上&#xff0c;最轻松的或许就是借钱时的许诺&#xff0c;而最难的&#xff0c;莫过于债务回收时的争取。尤其是在牵涉到追回那些欠债多年的旧账时&#xff0c;我们似乎总能更深地体会到“时间是把杀猪刀”的无奈。如何巧妙地追回这些遥不可及的欠款?这既是一场策略…

CSP - S 2024 模拟赛6补题报告

C S P − S 2024 模拟赛 6 补题报告 2024 年 8 月 5 日 − 2023 年 8 月 5 日 b y 邓时飏 CSP \ - \ S \ \ 2024 \ \ 模拟赛6 \ \ 补题报告 \\ 2024年8月5日 - 2023年8月5日 \\ by \ \ \ 邓时飏 CSP − S 2024 模拟赛6 补题报告2024年8月5日−2023年8月5日by 邓时飏 一、…

zotero安装与使用

文献管理工具&#xff09; Zotero软件官网https://www.zotero.org/download&#xff0c;不修改安装位置&#xff0c;默认安装就行&#xff1b;安装完成官网直接邮箱注册一个账号&#xff0c;软件登陆账号:编辑-首选项-同步 修改论文保存位置&#xff0c;有从其它电脑拷贝过来的…

强力巨彩又上新了!室内LED全彩显示屏尽“显”新体验

随着显示技术的进步和万物互联时代的到来&#xff0c;LED全彩显示屏在广告传媒、体育场馆、交通诱导、舞台演出等领域的应用持续扩大。强力巨彩更新迭代&#xff0c;室内LED全彩显示屏再次上新&#xff0c;其融合前沿GOB镀膜工艺&#xff0c;在防护性、成像质量、互动体验及设计…

视频美颜SDK与直播美颜插件在实时视频中的应用

视频美颜技术作为提升视频质量的重要手段&#xff0c;已经成为了许多视频和直播应用中不可或缺的一部分。本篇文章&#xff0c;笔者将探讨视频美颜SDK与直播美颜插件在实时视频中的应用&#xff0c;并分析其在用户体验和技术实现方面的重要性。 一、视频美颜SDK的应用场景 视…

el-tree懒加载状态下实现搜索筛选(纯前端)

1.效果图 &#xff08;1&#xff09;初始状态 &#xff08;2&#xff09;筛选后 2.代码 <template><div><el-inputplaceholder"输入关键字进行过滤"v-model"filterText"input"searchValue"></el-input><el-tree…

AI人工智能 时间序列数据介绍

AI人工智能 时间序列数据介绍 预测给定输入序列中的下一个是机器学习中的另一个重要概念。 本章为您提供有关分析时间序列数据的详细说明。 时间序列数据介绍 时间序列数据表示处于一系列特定时间间隔的数据。 如果我们想在机器学习中构建序列预测&#xff0c;那么必须处理连续…

DDei在线设计器-加载数据

加载数据 本示例演示了怎样加载已有的JSON到设计器中。 如需了解详细的API教程以及参数说明&#xff0c;请参考DDei文档 外部数据JSON demo.vue <script setup lang"ts"> import DDeiEditorView from "ddei-editor"; import { DDeiCoreStandLayou…

魔塔社区程序的`datasets.utils`导入`_datasets_server`错误问题的解决办法

运行魔塔社区的的一个识别图像文件中文字的模型程序&#xff1a; 出现如下的错误提示&#xff1a; from datasets.utils import _datasets_server,file_utils ImportError: cannot import name _datasets_server from datasets.utils (D:\PycharmProjects\minicpm_cuda_test\ve…

C语言指针详解(三)目录版

C语言指针详解&#xff08;三&#xff09;目录版 1、字符指针变量1.1、字符指针变量的一般应用1.2、常量字符串1.3、常量字符串与普通字符串的区别1.3.1 常量字符串的不可修改性1.3.2 常量字符串的存储 2、数组指针变量2.1、数组指针变量定义2.2、数组指针变量的初始化 3、二维…

数据科学家必须掌握的12个Python功能

Python 已经成为数据科学家的必选语言&#xff0c;从数据处理到机器学习&#xff0c;它几乎无所不能。本文将探讨一些Python特性&#xff0c;这些特性不仅能帮助你编写更高效、更易读、更易维护的代码&#xff0c;还特别适合数据科学的需求&#xff0c;使你的代码简洁且优雅。 …

选择 websim网站:一个用自然语言快速构建生成功能齐全的网站

Websim AI 是一个前沿的网站创建平台&#xff0c;旨在通过人工智能技术彻底改变网页设计流程。用户只需用自然语言描述他们的愿景&#xff0c;即可快速生成功能齐全的网站。该工具非常适合从初学者到经验丰富的开发人员使用&#xff0c;可以快速生成应用程序、网站原型或试验网…

【LLM大模型】“提示工程”的技术分类

尽管大模型非常强大&#xff0c;但仍然有着自身的局限。大模型可以生成看起来非常值得信赖的内容并引用外部资源&#xff0c;但是&#xff0c;大模型本身并不能直接访问互联网也不能访问互联网的资源。偏见往往会使大模型产生某些定型的内容。当被问到一个不知道答案的问题时&a…

在Pxe环境下使用kickstart自动化批量安装Linux系统

一、环境准备 1.rhel7.9操作系统 2.开启主机图形 systemctl set-default graphical.target reboot 如果你的服务器安装了图形&#xff0c;直接切换启动级别5&#xff1a; init 5 3.配置好ip&#xff0c;网关&#xff0c;dns地址 nmcli connection add ifname eth0 con-na…

初学Ubuntu及遇到的问题

初学Ubuntu及遇到的问题 Ubuntu的安装 1.安装VMware Workstation Pro&#xff08;网上有很多资料&#xff0c;本文就不细说啦~~~&#xff09; 2.在Ubuntu官网下载iso文件>https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/20.04/ iso文件随便放在哪个位置&#xff…

免费【2024】springboot 电影院订票信息管理系统的设计与实现

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

计算机毕业设计选题推荐-教务管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

六点建议有效防止晶振老化

晶振作为电子设备中的关键元件&#xff0c;其稳定性直接影响到整个系统的性能。晶振老化是导致其性能下降的主要原因之一。为了延长晶振的使用寿命&#xff0c;以下六点建议将帮助您有效防止晶振老化。 防止晶振老化的六点建议 1.避免裸手触碰&#xff1a; 不要用裸手直接触…