ElasticSearch(2)

elasticsearch 工具类-java java 中关于elasticsearch的工具类编写 阅读详情

5、通过Java访问ES

5.1 环境

创建maven工程,主要是通过两个依赖:

        <!--主要是这两个依赖-->
        <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>

5.2 索引操作

5.2.1 创建索引

首先需要使用RestHighLevelClient创建客户端,

RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost",9200,"http")) // 其中包括主机名,端口,请求方式
);
        // 创建索引请求
        CreateIndexRequest request = new CreateIndexRequest("user"); //user是索引的名
        // 通过客户端创建索引并得到响应的请求
        CreateIndexResponse response = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
​
        //相应状态
        boolean acknowledged = response.isAcknowledged();
        System.out.println(acknowledged);
        restHighLevelClient.close();

5.2.2 查询索引

查询索引使用的是GetIndexRequest,及GetIndexResponse.

// 创建索引
GetIndexRequest request = new GetIndexRequest("user");
GetIndexResponse response = restHighLevelClient.indices().get(request, RequestOptions.DEFAULT);

通过postman查询的索引信息主要包括下面的内容,通过java的api的get方法得到响应的信息

{
    "user": {
        "aliases": {}, //response.getAliases();
        "mappings": {}, //response.getMappings();
        "settings": { //response.getSettings();
            "index": {
                "creation_date": "1650780419948",
                "number_of_shards": "1",
                "number_of_replicas": "1",
                "uuid": "dWGyIiiFTZ6gEtqfqJ-g_g",
                "version": {
                    "created": "7080099"
                },
                "provided_name": "user"
            }
        }
    }
}

5.2.3 删除索引

删除索引使用DeleteIndexRequest,返回的可以是bool值表示是否删除成功。

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

5.3 文档操作

5.3.1 创建文档

创建文档首先需要有插入的内容,定义一个实体类并给与相应的数据。插入文档对应的是IndexRequest,及request.source()方法。

public class ESTest_InsertDoc {
    public static void main(String[] args) throws IOException {
        RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost",9200,"http"))
        );
        // 创建文档
        IndexRequest request = new IndexRequest("user");
        // 设置文档的id(自定义id)
        request.id("1001");
        // 文档的内容 相当于一行数据
        User user=new User();
        user.setName("张三");
        user.setSex("男");
        user.setAge(25);
        // 由于文档是json格式 因此需要把对象转换成json字符串
        ObjectMapper objectMapper=new ObjectMapper();
        String insertDocString = objectMapper.writeValueAsString(user);
        request.source(insertDocString, XContentType.JSON);
        //调用方法插入文档
        IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);
        //相应状态
        System.out.println(response.getResult());
        restHighLevelClient.close();
    }
}
​

5.3.2 修改文档

修改文档对应的是UpdateRequest,及request.doc()方法。

    // 修改文档
    UpdateRequest request = new UpdateRequest();
    request.index("user");
    request.id("1001");
    // 将性别修改为女
    request.doc(XContentType.JSON,"sex","女");
    UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);
    //相应状态
    System.out.println(response.getResult());
    restHighLevelClient.close();

5.3.3 查询文档

修改文档对应的是GetRequest,及request.get()方法。

    // 查询文档
    GetRequest request = new GetRequest();
    request.index("user").id("1001");
​
    GetResponse response = restHighLevelClient.get(request, RequestOptions.DEFAULT);
    //相应状态
    System.out.println(response.getSourceAsString());

5.3.4 删除文档

修改文档对应的是DeleteRequest。

  // 删除文档
        DeleteRequest request = new DeleteRequest();
        request.index("user").id("1001");
​
        DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
        //相应状态
        System.out.println(response.getResult());

5.3.5 批量增加文档

 // 创建文档
        BulkRequest request = new BulkRequest();
        ObjectMapper objectMapper=new ObjectMapper();
       request.add(new                 IndexRequest().index("user").id("1001").source(XContentType.JSON,"name","张三","sex","男","age",20));
        request.add(new                 IndexRequest().index("user").id("1002").source(XContentType.JSON,"name","李四","sex","男","age",20));
        request.add(new                 IndexRequest().index("user").id("1003").source(XContentType.JSON,"name","王五","sex","男","age",20));
        request.add(new                 IndexRequest().index("user").id("1004").source(XContentType.JSON,"name","赵六","sex","男","age",20));
      BulkResponse response = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
        //相应状态
        System.out.println(response.getItems());

5.3.6 批量删除文档

 // 删除文档
        BulkRequest request = new BulkRequest();
        ObjectMapper objectMapper=new ObjectMapper();
        request.add(new DeleteRequest().index("user").id("1001"));
        request.add(new DeleteRequest().index("user").id("1002"));
        request.add(new DeleteRequest().index("user").id("1003"));
        request.add(new DeleteRequest().index("user").id("1004"));
​
        BulkResponse response = restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
        //相应状态
        System.out.println(response.getItems());

5.3.7 全量查询

 // 全量文档
        SearchRequest request = new SearchRequest("user");
        request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        //相应状态
        System.out.println(hits.getTotalHits());
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }
        restHighLevelClient.close();

5.3.8 条件&分页&排序查询

//条件查询
        SearchRequest request = new SearchRequest("user");
        request.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("sex","男")));
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        //相应状态
        System.out.println(hits.getTotalHits());
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }

       // 分页查询文档
        SearchRequest request = new SearchRequest("user");
        SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        builder.from(0);
        builder.size(2);
        request.source(builder);
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        //相应状态
        System.out.println(hits.getTotalHits());
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }

        // 排序查询文档
        SearchRequest request = new SearchRequest("user");
        SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        builder.sort("age", SortOrder.DESC);
        request.source(builder);
        SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        //相应状态
        System.out.println(hits.getTotalHits());
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }
        restHighLevelClient.close();

Elasticsearch基础java-api讲解 java对es的操作主要是查询和聚合,想做上面两个操作先拼装DSL,然后执行DSL 封装查询DSL的两种方式 org.elasticsearch.search.builderSearchSourceBuilderorg.elasticsearch.index.query) com.google.gson.JsonObject 今天讲第一种方式拼接DSL:(第二种主要拼接jsonarr... 阅读详情

相关推荐

springboot整合elasticsearch实践,两种方式操作索引文档,解析附件中的内容,搜索附件中的中文

一、依赖引入 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> <!-- io流文件操作 --> <d

haixin_wu的博客 4067

ElasticSearch 使用 High Level REST Client 实现搜索等功能实战

欢迎关注方志朋的博客,回复”666“获面试宝典ES 全称 Elasticsearch 是一款分布式的全文搜索引擎,在互联网公司中,这款搜索引擎一直被程序员们所推崇。常见的使用场景如ELK日志分析,电商APP的商品推荐,社交APP的同城用户推荐等等。在ES的官网文档中,目前主要提供了两种方式访问,一种叫做Low Client,一种叫做High Level Rest Clie...

方志朋的博客 514

Elasticsearch(七)使用java代码实现es 分页 高亮 排序 查询功能

在es api中我们可以看到,其查询条件主要封在QueryBuilder中; 分页、排序、字段过滤、高亮主要封装在SourceBuilder中; 测试代码如下: package com.xiaohui; import org.apache.http.HttpHost; import org.elasticsearch.action.search.MultiSearchRequest; import org.elasticsearch.action.search.MultiSearchResponse; i

web13618542420的博客 3269

ES2CSV: Elasticsearch 数据导出为 CSV 的神器

ES2CSV: Elasticsearch 数据导出为 CSV 的神器 项目介绍 ES2CSV 是一个基于 Node.js 的工具,由 Taras Layshchuk 开发并维护。它旨在简化将 Elasticsearch 中的数据导出转换成 CSV 格式的过程,对于数据分析师、开发者以及需要处理大量 Elasticsearch 数据的团队而言,是一个极为实用的开源解决方案。通过简洁的命令行接口,用...

gitblog_00008的博客 831

SpringBoot2.0 整合 ElasticSearch框架,实现高性能搜索引擎

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfulweb接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。...

【积累】,是一个长期持续的过程。 1555

Chat2DB搜索引擎:Elasticsearch集成与全文检索

在日常数据库开发和管理中,你是否经常遇到这样的困境: - 面对海量数据,简单的LIKE查询性能极差,响应时间长达数秒甚至分钟级 - 需要实现复杂的多字段联合搜索,但传统SQL难以高效处理 - 希望实现模糊匹配、同义词搜索、拼音搜索等高级搜索功能 - 搜索结果需要按相关性排序,而不是简单的精确匹配 Chat2DB作为一款智能的通用SQL客户端,通过Elasticsearch集成完美解决了这些痛点...

gitblog_00874的博客 823

linux命令行elasticsearch查询工具es2unix

当想在linux的命令行中查看elasticsearch的状态时,可以用es2unix这个工具,插件地址: https://github.com/elasticsearch/es2unix。它是elasticsearch官方推出的,可以通过命令来查看es的各种状态,安装方法 curl -s download.elasticsearch.org/es2unix/es > /bin/es chmod +x /bin/es 这个是作者编译的,如果你运行时报Unrecognized VM option ‘Ti

m0_67391870的博客 902

kettle向elasticsearch6.4.2中插入数据

kettle7.1中支持的es连接插件,只支持es2.2版本,需要替换elasticsearch-bulk-insert-plugin插件 源码及插件见:链接: https://pan.baidu.com/s/1yEjLaWJZLcMElGtKYKXtug 密码: pb8j 下载完后,在解压文件夹中,拷贝以下文件,替换到kettle data-integration\plugins\elasti...

xpm_xq的博客 9442

【亲测免费】 最新安装Elasticsearch 8.12.2、es-ik分词器、Kibana 8.12.2

最新安装Elasticsearch 8.12.2、es-ik分词器、Kibana 8.12.2 【下载地址】最新安装Elasticsearch8.12.2es-ik分词器Kibana8.12.2 最新安装Elasticsearch 8.12.2、es-ik分词器、Kibana 8.12.2本仓库提供了一个资源文件的下载,...

gitblog_06582的博客 697

alertmanager2es:将Prometheus告警流式传输至Elasticsearch的高效解决方案

alertmanager2es:将Prometheus告警流式传输至Elasticsearch的高效解决方案 项目介绍 alertmanager2es 是一个轻量级守护进程,它接收来自AlertManager的HTTP Webhook通知,并将其存储到Elasticsearch索引中,以便进行搜索和分析。这个项目特别适用于那些希望对历史告警数据进行深入挖掘的团队,从而优化报警规则或理解事件的影响。...

gitblog_00004的博客 505

elasticSearch 8.2.3 + spring boot + es client 快速上手

elasticSearch 8.2.3 + spring boot + es client 快速上手

weixin_38293691的博客 2050

ElasticSearch 5.2 安装ES

前言 这篇文章简单地介绍了安装ES,当然,安装ES就是很简单。 步骤 1.首先,java环境是需要配置好的,配置步骤略。 2.下载安装包,下载地址:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-5-2-0 或者在linux中下载: curl -L -O https://artifacts.elastic...

成长是一辈子的事 1009

如何为Chat2DB构建强大的Elasticsearch全文检索搜索引擎

Chat2DB作为一款智能的多数据库管理工具,虽然原生支持多种数据库,但通过集成Elasticsearch可以显著提升其全文检索和数据搜索能力。本文将详细介绍如何为Chat2DB构建完整的Elasticsearch搜索引擎解决方案。 ## 📊 Chat2DB搜索引擎架构设计 在[chat2db-server/chat2db-plugins/](https://link.gitcode.com

gitblog_01013的博客 570

SpringBoot2 集成 ElasticSearch 实现搜索引擎

一 简介 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。 二 安装 Linux系统:centos7下搭建 ElasticSearch 环境。 三 与 Spring boot2 集成 3.1 pxm.xml依赖 <!-- elasticsearch-rest 6.5.

lovelichao12的专栏 580

elasticsearch2.2系列一(es的安装)

elasticsearch2.2.1的安装

2739
上一篇: ElasticSearch(1)
下一篇: Mybatis-总结
~程序员小白~
博客等级 码龄11年 198粉丝 · 49原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值