Transport Client 客户端的使用

这篇具有很好参考价值的文章主要介绍了Transport Client 客户端的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

官方文档:TransportClient

一、基本概念

这里描述操作elasticsearch采用TransportClient这种方式,官方明确表示在ES 7.0版本中将弃用TransportClient客户端,且在8.0版本中完全移除它.

整合springboot

properties配置

# es
spring.data.elasticsearch.repositories.enabled=true
spring.elasticsearch.rest.uris=192.168.60.181:9200
#spring.elasticsearch.rest.username=elastic
#spring.elasticsearch.rest.password=nE7jA%5m

# ???
#elasticsearch.cluster.name=${ELASTICSEARCH_NAME:tmxmall_cluster}
#elasticsearch.master.address=${ELASTICSEARCH_HOST:elasticsearch}
#elasticsearch.cluster.tcp-port=${ELASTICSEARCH_PORT:9300}

1)通过配置类

public class Config {

    @Bean("transportClient")
    public TransportClient genTransportClient(@Value("${elasticsearch.cluster.name}") String clusterName,
                                              @Value("${elasticsearch.master.address}") String masterAddress,
                                              @Value("${elasticsearch.cluster.tcp-port}") int tcpPort) throws UnknownHostException {
        System.setProperty("es.set.netty.runtime.available.processors", "false");
        Settings settings = Settings.builder()
                .put("cluster.name", clusterName)
                .put("client.transport.sniff", true)
                .build();
        return new PreBuiltTransportClient(settings)
                .addTransportAddress(new TransportAddress(InetAddress.getByName(masterAddress), tcpPort));
    }
}

2)使用@PostConstruct注解
如果整合其他客户端时使用这种方式

    private static TransportClient transportClient;

    private static String clusterName;

    private static String masterAddress;

    private static int tcpPort;

    @Value("${elasticsearch.cluster.name}")
    public void setClusterName(String clusterName) {
        ESDAO.clusterName = clusterName;
    }

    @Value("${elasticsearch.master.address}")
    public void setMasterAddress(String masterAddress) {
        ESDAO.masterAddress = masterAddress;
    }

    @Value("${elasticsearch.cluster.tcp-port}")
    public void setTcpPort(int tcpPort) {
        ESDAO.tcpPort = tcpPort;
    }


    @PostConstruct
    public void init() {
        System.setProperty("es.set.netty.runtime.available.processors", "false");
        Settings settings = Settings.builder()
                .put("cluster.name", clusterName)
                .put("client.transport.sniff", true)
                .build();
        try {
            transportClient = new PreBuiltTransportClient(settings)
                    .addTransportAddress(new TransportAddress(InetAddress.getByName(masterAddress), tcpPort));
        } catch (java.net.UnknownHostException e) {
        }
    }

3)测试代码的时候使用这种

  //获取client
Settings settings= Settings.builder().put("cluster.name","my-application").build();
TransportClient transportClient=new PreBuiltTransportClient(settings);
transportClient.addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"),9300));

二、常用操作

1、简单查询es( 指定index type id)

/**
* 简单查询es 指定index type id
*/
@Test
  public void search() throws UnknownHostException {
         //获取client
        Settings settings= Settings.builder().put("cluster.name","my-application").build();
        TransportClient transportClient=new PreBuiltTransportClient(settings);
        transportClient.addTransportAddress(new 
          TransportAddress(InetAddress.getByName("localhost"),9300));
        // 发起请求得到响应
        GetResponse  response=transportClient.prepareGet("index3","user3","10").get();
        System.out.println(response.getSource());
  }

2、创建索引

    public void createIndex(String indexName, String mappings){
        transportClient.admin().indices()
                .prepareCreate(indexName)
                .setSettings(Settings.builder()
                        .put("index.number_of_shards",5)
                        .put("index.max_result_window",100000000)
                        .put("index.analysis.analyzer.tmxenglish.type","english")
                        .put("index.analysis.analyzer.tmxenglish.stopwords_path","stopWords.txt")
                        .put("index.number_of_replicas",0))
                .addMapping("_doc", mappings, XContentType.JSON).get();
    }

3、判断索引是否存在

    public boolean indexExists(String index){
        IndicesExistsRequest request = new IndicesExistsRequest(index);
        logger.info("[indexExists] client {}  index {}", transportClient == null, index);
        IndicesExistsResponse response = transportClient.admin().indices().exists(request).actionGet();
        if (response.isExists()) {
            return true;
        }
        return false;
    }

4、批量查询mget

参考文章来源地址https://www.toymoban.com/news/detail-484488.html

//构建一个mget的查询
       MultiGetRequestBuilder multi_get = client.prepareMultiGet();
        //添加两条get数据
        multi_get.add("a_active","active","1");
        multi_get.add("b_active","active","2","3");
 
        //获取响应
        MultiGetResponse mgr= multi_get.get();
         //循环读取
        for (MultiGetItemResponse itemResponse : mgr) {
 
            GetResponse response = itemResponse.getResponse();
            //如果存在则打印响应消息
            if (response.isExists()) {
                String json = response.getSourceAsString();
                System.out.println(" source data: "+json);
            }
 
        }

5、bulk实现批量增删改操作。

  @Test
    public void bulk() throws Exception{
        Settings settings=Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings);
        client.addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"),9300));
 
        BulkRequestBuilder bulkRequestBuilder = client.prepareBulk();
        IndexRequest request=new IndexRequest();
        request.index("index3")
                .type("user3")
                .id("13")
                .source(XContentFactory.jsonBuilder()
                .startObject()
                .field("catid","85")
                .field("classify","85")
                .field("author","宇宙无敌")
                .field("id","漫威")
                .field("title","漫威")
                .endObject());
 
        IndexRequest request1=new IndexRequest();
        request1.index("index3")
                .type("user3")
                .id("14")
                .source(XContentFactory.jsonBuilder()
                        .startObject()
                        .field("catid","55")
                        .field("classify","85")
                        .field("author","宇宙无敌")
                        .field("id","漫威")
                        .field("title","漫威")
                        .endObject());
        bulkRequestBuilder.add(request1);
        bulkRequestBuilder.add(request);
        BulkResponse bulkItemResponses = bulkRequestBuilder.get();
        System.out.println(bulkItemResponses.status());
 
    }

6、使用query查询 match_all 查询所有

  @Test
    public void query() throws Exception{
        Settings settings=Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings);
        client.addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"),9300));
 
        MatchAllQueryBuilder builder= QueryBuilders.matchAllQuery();
 
 
        SearchRequestBuilder index3 = client.prepareSearch("index3")
                .setQuery(builder)
                .setSize(5);
        SearchResponse searchResponse = index3.get();
        SearchHits hits =  searchResponse.getHits();
        for (SearchHit hit:hits) {
            System.out.println(hit.getSourceAsString());
        }
    }

7、使用query查询 match 查询

  @Test
    public void matchQuery() throws Exception{
        Settings settings=Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings);
        client.addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"),9300));
 
        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("title", "爱");
        SearchRequestBuilder index = client.prepareSearch("index3").setQuery(matchQueryBuilder).setSize(10);
        SearchHits hits = index.get().getHits();
        for (SearchHit hit:hits
             ) {
            System.out.println(hit.getSourceAsString());
        }
    }

8、使用query查询 mutilMatch 查询

@Test
    public void mutilMatchQuery() throws Exception{
        Settings settings=Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings);
        client.addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"),9300));
 
        MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery("周星驰影帝", "author","title");
        SearchRequestBuilder index = client.prepareSearch("index3").setQuery(multiMatchQueryBuilder).setSize(10);
        SearchHits hits = index.get().getHits();
        for (SearchHit hit:hits
        ) {
            System.out.println(hit.getSourceAsString());
        }
    }

9、使用query查询 term和terms查询

 @Test
    public void termsMatchQuery() throws Exception{
        Settings settings=Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings);
        client.addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"),9300));
 
        TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("title", "周星驰", "影帝");
        SearchRequestBuilder index = client.prepareSearch("index3").setQuery(termsQueryBuilder).setSize(10);
        SearchHits hits = index.get().getHits();
        for (SearchHit hit:hits
        ) {
            System.out.println(hit.getSourceAsString());
        }
    }

10、使用query查询 范围 通配符 前缀 模糊查询

  @Test
    public void query1() throws Exception{
        Settings settings=Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings);
        client.addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"),9300));
        //范围查询
        //QueryBuilder queryBuilder = QueryBuilders.rangeQuery("classify").from("1").to("40");
 
        //通配符查询 * 零个或多个
//        QueryBuilder queryBuilder = QueryBuilders.wildcardQuery("author","周*");
 
        //前缀查询
//        QueryBuilder queryBuilder = QueryBuilders.prefixQuery("author","周");
 
        //模糊查询 查询类型的
//        QueryBuilder queryBuilder = QueryBuilders.fuzzyQuery("id","aac");
 
        //id查询
 
        QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1","2","4");
        SearchRequestBuilder index = client.prepareSearch("index3").setQuery(queryBuilder).setSize(10);
        SearchHits hits = index.get().getHits();
        for (SearchHit hit:hits
        ) {
            System.out.println(hit.getSourceAsString());
        }
    }

11、queryString 查询

  @Test
    public void queryString() throws Exception{
        Settings settings=Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings);
        client.addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"),9300));
        // + 代表必须有 -代表没有  
        QueryBuilder queryBuilder=QueryBuilders.queryStringQuery("+周星驰 -sss");
        SearchRequestBuilder index3 = client.prepareSearch("index3")
                .setQuery(queryBuilder)
                .setSize(10);
        SearchResponse searchResponse = index3.get();
        for (SearchHit hit:searchResponse.getHits()) {
            System.out.println(hit.getSourceAsString());
        }
    }

12、组合查询

 @Test
    public void boolQuery() throws Exception{
        Settings settings=Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings);
        client.addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"),9300));
        QueryBuilder queryBuilder=QueryBuilders.boolQuery()
                .must(QueryBuilders.matchQuery("author","周星驰"))
                .mustNot(QueryBuilders.matchQuery("title","梁朝伟"))
                .should(QueryBuilders.matchQuery("title","影帝"))
                .filter(QueryBuilders.rangeQuery("id").gte("1"));
 
 
        SearchRequestBuilder index3 = client.prepareSearch("index3")
                .setQuery(queryBuilder)
                .setSize(10);
        SearchResponse searchResponse = index3.get();
        for (SearchHit hit:searchResponse.getHits()) {
            System.out.println(hit.getSourceAsString());
        }
    }

三、聚合操作

1、聚合查询

到了这里,关于Transport Client 客户端的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • SpringBoot中使用Spring integration加Eclipse Paho Java Client 实现MQTT客户端

    Spring Integration 是一个开源的集成消息处理框架,它提供了消息传递、消息过滤、消息转换、消息路由等功能,可以用于构建异步、分布式的系统。 Spring-integration-stream是Spring Integration框架的一个组件,用于在不同的系统和应用之间进行消息传递、集成和流处理。 它提供了一套

    2024年02月10日
    浏览(36)
  • ios客户端学习笔记(七):iOS客户端的UI设计

    iOS客户端的UI设计是指在iOS操作系统上开发应用程序时所涉及的用户界面设计,包括应用程序的布局、颜色、字体、图标等元素的设计。良好的UI设计应该能够提高用户体验,使用户能够轻松地使用应用程序。 在iOS客户端的UI设计中,需要考虑以下几个方面: 应用程序布局应

    2023年04月26日
    浏览(36)
  • 微服务架构,客户端如何catch服务端的异常?

    在微服务架构或者分布式系统中,客户端如何捕捉服务端的异常? 这里说的客户端指调用方、服务端指被调用方,它们通常运行在不同的进程之中,这些进程可能运行在同一台服务器,也可能运行在不同的服务器,甚至不同的数据机房;其使用的技术栈可能相同,也可能存在

    2024年03月09日
    浏览(36)
  • linux下安装mysql客户端client

    1. 下载mysql客户端 MySQL的Linux客户端官网下载地址 根据Linux的系统版本选择下载对应的rpm安装包(如下所示),这里选择的是mysql8.0.27版本的redhat8系列的MySQL客户端(可看到有四个rpm包,都必须下载,缺一不可!!!) 2. 上传到Linux 这里是上传到/usr/local/src目录下 3. 安装mysql客

    2024年02月01日
    浏览(36)
  • Java常用的Http client客户端

    Apache HttpClient是一个开源的Java HTTP客户端库,具有丰富的功能集,包括自动重试、连接管理、cookie管理、代理支持和认证等。HttpClient已成为Java开发中广泛使用的HTTP客户端之一。 OkHttp是Square公司开发的一个高性能的HTTP客户端库,具有自动重试、连接池、交互式调试和压缩支持

    2024年02月08日
    浏览(33)
  • es相关的官方客户端与spring客户端对比与介绍

    es提供的 TransportClient 传统的客户端,基于TCP传输协议与Elasticsearch通信。 已经被弃用,不推荐使用。 适用于Elasticsearch 5.x及以前的版本 因为Elasticsearch 6.x及以上版本已不再支持TCP Transport协议,TransportClient无法连接Elasticsearch集群。 RestHighLevelClient 是一个高级的REST客户端,主要用于与

    2024年02月02日
    浏览(44)
  • 【Kafka源码走读】Admin接口的客户端与服务端的连接流程

    注:本文对应的kafka的源码的版本是trunk分支。写这篇文章的主要目的是当作自己阅读源码之后的笔记,写的有点凌乱,还望大佬们海涵,多谢! 最近在写一个Web版的kafka客户端工具,然后查看Kafka官网,发现想要与Server端建立连接,只需要执行 方法即可,但其内部是如何工作

    2024年02月16日
    浏览(35)
  • C++实现一个简单的客户端与服务端的通信(笔记附代码)

    目录 前言 一、Socket的客户端与服务端的通讯原理 二、各接口介绍 1.WSAStartup:异步启动套接字命令 2.Socket创建套接字 3.bind:绑定套接字 4.listen:监听 5.accept:接受连接请求 6. connet:发送连接请求  7.send:发送数据 8.recv:接收数据函数  9.closesocket, WSACleanup:释放socket 三、代码块的

    2024年02月06日
    浏览(40)
  • .NetCore gRpc 客户端与服务端的单工通信Demo

    方式一 使用vs 2022(也可以是其他版本)创建一个grpc的服务,如下这样 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uipEG9Xu-1687172462785)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20230619183828284.png)] 简单方便,创建项目后的目录结构如下图

    2024年02月09日
    浏览(42)
  • client-go源码结构及客户端对象

    G  Goup 资源组,包含一组资源操作的集合 V Version 资源版本,用于区分不同API的稳定程度及兼容性 R Resource 资源信息,用于区分不同的资源API K Kind 资源对象类型,每个资源对象都需要Kind来区分它自身代表的资源类型 (1)通过 GVR 可以构造 REST Api  进行接口调用,而 GVK 可以

    2024年04月26日
    浏览(27)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包