广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >RestHighLevelClient-简单使用
  • 243
分享到

RestHighLevelClient-简单使用

2024-04-02 19:04:59 243人浏览 泡泡鱼
摘要

一、创建连接 !ps:RestHighLevelClient是官方指定的连接api。另外一个是TransportClient,但是TransportClient这个是已经废弃不用的,所以会在ES8.0之后完全移除,也就是说8.0之后就无法使

一、创建连接
!ps:RestHighLevelClient是官方指定的连接api。另外一个是TransportClient,但是TransportClient这个是已经废弃不用的,所以会在ES8.0之后完全移除,也就是说8.0之后就无法使用了
RestHighLevelClient的Maven依赖为(使用前必须添加相应依赖)

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.9.2</version>
</dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.9.2</version>
 </dependency>

注意:以上的依赖版本可以根据你使用的ES的版本来定,向下兼容,但是无法向上兼容

创建连接

    static String ip = "localhost";
    static int port = 9200;
    static RestHighLevelClient restHighLevelClient = null;
    static TransportClient client = null;
    
    static  RestHighLevelClient initClient(){
        //这里的RestClient.builder(new HttpHost(ip,port),.........)支持多个httphost连接,也就是支持连接多个elasticsearch
        restHighLevelClient = new RestHighLevelClient(RestClient.builder(new HttpHost(ip,port)));
    }

    static Connection getInstance(){
        synchronized (ElasticSearchFactory.class){
            if (restHighLevelClient == null){
             restHighLevelClient  =   initClient();
            }
        }
        return connection;
    }

RestHighLevelClient 支持对ES的增删改查、批量操作
新增:

 public static  void creatIndex(String JSON){
        IndexRequest indexRequest = new IndexRequest("test_index","String");
        indexRequest.source(json, XContentType.JSON);//这里的json为存入ES的文档内容
        try {
            restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);//RequestOptions在新方法中必须选择
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

查询:
查询支持直接查询和条件查询,由于ES是根据索引、文档类型和文档ID确定一个唯一的文档的,所以直接查询必须要有索引和类型还有ID

    public static Map<String, Object> getIndex(String indexName,String type,String id){
        GetRequest request = new GetRequest(indexName);
        //SearchRequest searchRequest = new SearchRequest(indexName);
        try {
            GetResponse search = restHighLevelClient.get(request, RequestOptions.DEFAULT);
            Map<String, Object> source = search.getSource();
            return source;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new HashMap<>();
    }

条件查询:
条件查询支持所有的ES的查询规则:使用ES查询语句须知

    public static Map<String, Object> searchIndex(String indexName){
        //GetRequest request = new GetRequest(indexName);
        //SearchRequest searchRequest = new SearchRequest(indexName);
        QueryBuilder queryBuilders = QueryBuilders.boolQuery().filter(
                QueryBuilders.terMQuery("queryKey","吱吱吱ZZZ")
        );
        SearchRequest searchRequest = new SearchRequest();
        //searchRequest.indices("posts");这里可以设计GEET或者POST
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        // searchSourceBuilder.sort(new ScoreSortBuilder().order(SortOrder.DESC));支持按评分排序,评分是指分词之后取得的文档相似度评分
        searchSourceBuilder.query(QueryBuilders.boolQuery().filter(QueryBuilders.termQuery("queryKey.keyWord","吱吱吱ZZZ")));
        searchRequest.source(searchSourceBuilder);
        try {
            SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
            SearchHit[] hits = search.getHits().getHits();
            for (SearchHit searchHit : hits){
                Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();
                System.out.println("source : {}" + sourceAsMap.toString());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new HashMap<>();
    }

修改:
ps:ES中其实并不存在真正意义上的修改,其实是进行的文档覆盖,先将原文档查出来标记删除,然后在原文档的基础上添加上修改形成一份新文档,存入ES中,之后再将打上删除标记的文档删除。

    public static void updateIndex(String indexName, String type, String id, String json){
        UpdateRequest request = new UpdateRequest(indexName, type, id);

        request.doc(json, XContentType.JSON);
        try {
            UpdateResponse updateResponse = restHighLevelClient.update(request,RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

删除:


    public static void deleteIndex(String indexName, String type, String id){
        DeleteRequest request = new DeleteRequest(indexName,type,id);
        try {
            restHighLevelClient.delete(request,RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

bulk操作,bulk操作相当于批处理,能够在一次操作中处理一批数据,同时能够同时处理,增删改操作

    public static void bulkIndex(){
            BulkRequest request = new BulkRequest();
            String jsonString="{\n" +
                    "\t\"databaseId\": \"謝謝謝謝謝謝\",\n" +
                    "\t\"databaseType\": \"嘻嘻嘻\",\n" +
                    "\t\"queryKey\":\"吱吱吱ZZZ\"\n" +
                    "}\n";
        UUID uuid = UUID.randomUUID();
        request.add(new IndexRequest("test_index", "String", uuid.toString())
                    .source(jsonString,XContentType.JSON));
            String updateJson="{\n" +
                    "  \"queryKey\":\"吱吱吱ZZZ\"\n" +
                    "}";
            request.add(new UpdateRequest("test_index", "String", uuid.toString())
                    .doc(updateJson,XContentType.JSON));
            request.add(new DeleteRequest("test_index", "String", uuid.toString()));

        try {
            restHighLevelClient.bulk(request, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

执行ES-DSL


String json = "{\"bool\":{\"filter\":[{\"term\":{\"queryKey.keyword\":\"吱吱吱ZZZ\"}}]}}";
String index= "test_index";
    public static void wapQuerty(String json,String index){
        WrapperQueryBuilder queryBuilder = new WrapperQueryBuilder(json);
        SearchRequest searchRequest = new SearchRequest();
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(queryBuilder);
        searchRequest.source(searchSourceBuilder).indices(index);
        try {
            SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
            SearchHit[] hits = search.getHits().getHits();
            for (SearchHit searchHit : hits){
                Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();
                String id = searchHit.getId();
                System.out.println("id:"+id);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

--结束END--

本文标题: RestHighLevelClient-简单使用

本文链接: https://www.lsjlt.com/news/99287.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • RestHighLevelClient-简单使用
    一、创建连接 !ps:RestHighLevelClient是官方指定的连接API。另外一个是TransportClient,但是TransportClient这个是已经废弃不用的,所以会在ES8.0之后完全移除,也就是说8.0之后就无法使...
    99+
    2022-10-22
  • springboot2+es7怎么使用RestHighLevelClient
    这篇“springboot2+es7怎么使用RestHighLevelClient”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这...
    99+
    2023-07-02
  • springboot2+es7使用RestHighLevelClient的示例代码
    目录一、引入依赖jar二、application.properties配置三、使用其它由于spring和es的集成并不是特别友好,es的高低版本兼容问题、api更新频率高等问题,所以...
    99+
    2022-11-13
  • 简简单单使用Docker部署Confluence
    一、环境要求 1、已安装docker17及以上版本 二、容器运行 docker run -d --name confluence -p 8090:8090 --user root:...
    99+
    2022-11-12
  • 简单使用Linux
    目录 Linux的组成 使用桌面终端访问linux 字符命令 基础 查看网卡信息以及获取ip地址 远程连接Linux服务器 Xshell远程连接Linux 使用MobaXterm远程连接Linux ​编辑 远程操作命令 重置root密码 ...
    99+
    2023-09-13
    linux 运维 服务器
  • Kafka_python:简单使用
    KafkaConsumer #!/usr/bin/env python #coding:gbk #kafka的使用 consumer使用 import kafka import KafkaConsumer #消费kafka中最...
    99+
    2023-01-31
    简单 Kafka_python
  • sqlalchemy 简单使用
    一, sqlalchemy 与数据库连接安装:        pip install sqlalchemysqlalchemy...
    99+
    2022-10-18
  • mycat简单使用
    MyCat MyCAT是使用JAVA语言进行编写开发,使用前需要先安装JAVA运行环境(JRE),由于MyCAT中使用了JDK7中的一些特性,所以 要求必须在JDK7以上的版本上运行。 mysql mysql主从复制 首先安装m...
    99+
    2021-02-12
    mycat简单使用
  • EnterCriticalSection简单使用
    EnterCriticalSection是C++中的一个函数,用于进入一个临界区。临界区是一段代码,同一时间只能有一个线程执行。下面...
    99+
    2023-09-21
    使用
  • Python Tkinter 简单使用
    简单的一些实例,能够实现一般的功能就够用了 Tkinter: 创建顶层窗口: # -*- coding: utf-8 -*- from Tkinter import *   root = Tk() root.title("顶层窗口") ...
    99+
    2023-01-30
    简单 Python Tkinter
  • scrapy的简单使用
    使用之前的创建虚拟环境方法(pipenv) 创建虚拟环境并进入虚拟环境 mkdir douban cd douban pipenv install pipenv shell 再安装我们的scrapy pipenv install s...
    99+
    2023-01-30
    简单 scrapy
  • python datetime简单使用
    import datetime #当前时间print datetime.datetime.now()2018-06-13 16:22:42.414143 #当前时间减去七天print datetime.datetime.now() - da...
    99+
    2023-01-31
    简单 python datetime
  • NFS的简单使用
    在NFS服务器建一个目录,用来存共享文件,提供NFS磁盘空间[root@PROD2 ~]# mkdir -p /u01/nfs_shares[root@PROD2 ~]# ll /u01总用量 8drwxr...
    99+
    2022-10-18
  • C++ EnterCriticalSection简单使用
    目录EnterCriticalSection作用一、首先是它的使用步骤:二、示例代码:EnterCriticalSection作用 用途主要是在多线程中,当开启多线程中,要控制函数...
    99+
    2022-11-12
  • python logging简单使用
    #coding: UTF-8'''Created on 2014年1月6日@author: mingliu'''import logging#导入mylog = logging.getLogger('mylogger')#申请一个名字oth...
    99+
    2023-01-31
    简单 python logging
  • jeecg-boot简单使用
    1、官方网站 源代码 后端:https://gitee.com/jeecg/jeecg-boot 前端:https://gitee.com/jeecg/jeecgboot-vue3 文档:http://doc.jeecg.com/20438...
    99+
    2023-08-31
    java 开发语言
  • Python简单使用InfluxDB
    之前已经在自己的MQTT服务器上安装好了InfluxDB时序数据库,接下来写个Python程序测试下. API详情参阅这里 打开powershell,执行pip install influxdb安装模块 程序API详细参考这...
    99+
    2023-01-31
    简单 Python InfluxDB
  • pymongo的简单使用
    pymongo的使用 首先安装: pip install pymongo 安装好了使用 import pymongo # 链接mongodb,得到一个mongoclient的客户端对象 client = pymongo.MongoCli...
    99+
    2023-01-31
    简单 pymongo
  • git的简单使用(windows)
    使用参考文档 git简易指南:http://www.bootcss.com/p/git-guide/ git官方文档:https://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5   git下载地址 ...
    99+
    2023-01-30
    简单 git windows
  • w3af简单使用教程
    w3af简单使用教程w3af是一个Web应用程序***和检查框架.该项目已超过130个插件,其中包括检查网站爬虫,SQL注入(SQL Injection),跨站(XSS),本地文件包含(LFI),远程文件包含(RFI)等.该项目的目标是要建...
    99+
    2023-01-31
    简单 教程 w3af
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作