精华内容
下载资源
问答
  • elasticsearch ES restclient设置搜索不存在索引时不报错。
    2022-02-24 10:45:28

    有时候搜索多个索引的时候,有的索引不存在,我希望忽略调传入参数中的不存在的索引。可以添加如下参数,这样ES不会返回错误信息。

    SearchRequest searchRequest = new SearchRequest(indices, searchSourceBuilder);
    searchRequest.indicesOptions(IndicesOptions.lenientExpandOpen());
    
    更多相关内容
  • org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.4.2</version> </dependency> 1.1、解决与SpringBoot自带...

    1、导入依赖

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

    1.1、解决与SpringBoot自带依赖的冲突

    <elasticsearch.version>7.4.2</elasticsearch.version>
    

    2、编写配置、容器中注入RestHighLevelClient

    import org.apache.http.HttpHost;
    import org.elasticsearch.client.RestClient;
    import org.elasticsearch.client.RestClientBuilder;
    import org.elasticsearch.client.RestHighLevelClient;
    import org.springframework.boot.SpringBootConfiguration;
    import org.springframework.context.annotation.Bean;
    @SpringBootConfiguration
    public class GulimallElasticSearchConfig {
        @Bean
        public RestHighLevelClient esRestClient() {
            RestClientBuilder builder = null;
            builder = RestClient.builder(new HttpHost("192.168.56.10", 9200, "http"));
            RestHighLevelClient client = new RestHighLevelClient(builder);
            return client;
        }
    }
    
    
    

    3、请求拦截设置

    public static final RequestOptions COMMON_OPTIONS;
    static {
        RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
        // builder.addHeader("Authorization", "Bearer " + TOKEN);
        // builder.setHttpAsyncResponseConsumerFactory(
        //         new HttpAsyncResponseConsumerFactory
        //                 .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));
        COMMON_OPTIONS = builder.build();
    }
    
    展开全文
  • 1.8 7.12.1 org.elasticsearch.client elasticsearch-rest-high-level-client 7.12.1 查询的基本步骤是: 1. 创建 SearchRequest 对象 2. 准备 Request.source() ,也就是 DSL 。 ① QueryBuilders 来构建查询条件 ...

    <properties>
        <java.version>1.8</java.version>
        <elasticsearch.version>7.12.1</elasticsearch.version>
    </properties>
    <dependencies>
        <!--elasticsearch依赖包-->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.12.1</version>
        </dependency>
    </dependencies>

     

    查询的基本步骤是:

    1. 创建 SearchRequest 对象
    2. 准备 Request.source() ,也就是 DSL
    QueryBuilders 来构建查询条件
    传入 Request.source() query() 方法
    3. 发送请求,得到结果
    4. 解析结果(参考 JSON 结果,从外到内,逐层解析)
        @Test
        void testMatchAllHotelIndex() throws IOException {
            // 1.创建Request对象
            SearchRequest request = new SearchRequest("hotel");
            // 2.准备DSL
            request.source().query(QueryBuilders.matchAllQuery());
            // 3.发起请求
            testFindHotelIndex(request);
        }
    
        @Test
        void tesMatchHotelIndex() throws IOException {
            // 1.创建Request对象
            SearchRequest request = new SearchRequest("hotel");
            // 2.准备DSL
            request.source().query(QueryBuilders.matchQuery("all","如家"));
            // 3.发起请求
            testFindHotelIndex(request);
        }
    
        
        /**
         * @description ES通用数据查询
         * @param request:
         */
        public void testFindHotelIndex(SearchRequest request) throws IOException {
            // 3.发起请求
            SearchResponse response = client.search(request, RequestOptions.DEFAULT);
            //System.out.println(response);
    
            //4.解析结果
            SearchHits hits = response.getHits();
            //4.1查询总条数
            long value = hits.getTotalHits().value;
            System.out.println("es搜索到:" + value + "条数据");
            //4.2查询的结果数组
            SearchHit[] hitsHits = hits.getHits();
    
            for (SearchHit e : hitsHits) {
                //4.3 得到source
                String json = e.getSourceAsString();
                //4.4 打印
                System.out.println("json = " + json);
    
                HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
                System.out.println("hotelDoc = " + hotelDoc.toString());
            }
        }

    其它查询变化不大

        private RestHighLevelClient client;
    
        @BeforeEach
        void setUp() {
            this.client = new RestHighLevelClient(RestClient.builder(
               HttpHost.create("http://192.168.2.199:9200")
            ));
        }
    
        @AfterEach
        void tearDown() throws IOException {
            this.client.close();
        }
    
        @Test
        void testClient() {
            System.out.println(client);
        }
    
        /**
         * @description matchAll 查询所有
         */
        @Test
        void testMatchAllHotelIndex() throws IOException {
            // 1.创建Request对象
            SearchRequest request = new SearchRequest("hotel");
            // 2.准备DSL
            request.source().query(QueryBuilders.matchAllQuery());
            // 3.发起请求
            testFindHotelIndex(request);
        }
        /**
         * @description  multiMatch多字段查询
         */
        @Test
        void testMultiMatchHotelIndex() throws IOException {
            // 1.创建Request对象
            SearchRequest request = new SearchRequest("hotel");
            // 2.准备DSL
            request.source().query(QueryBuilders.multiMatchQuery("如家","name","business","brand"));
            // 3.发起请求
            testFindHotelIndex(request);
        }
    
        /**
         * @description match 单字段查询
         */
        @Test
        void tesMatchHotelIndex() throws IOException {
            // 1.创建Request对象
            SearchRequest request = new SearchRequest("hotel");
            // 2.准备DSL
            request.source().query(QueryBuilders.matchQuery("all","如家"));
            // 3.发起请求
            testFindHotelIndex(request);
        }
    
    
        /**
         * @description 精确查询常见的有term查询和range查询,同样利用QueryBuilders实现
         * term 词条查询
         * range 范围查询
         */
        @Test
        void testTermHotelIndex() throws IOException {
            // 1.创建Request对象
            SearchRequest request = new SearchRequest("hotel");
            // 2.准备DSL
            request.source().query(QueryBuilders.termQuery("city","上海"));
            // 3.发起请求
            testFindHotelIndex(request);
        }
    
        /**
         * @description 精确查询常见的有term查询和range查询,同样利用QueryBuilders实现
         * term 词条查询
         * range 范围查询
         */
        @Test
        void testRangeHotelIndex() throws IOException {
            // 1.创建Request对象
            SearchRequest request = new SearchRequest("hotel");
            // 2.准备DSL
            request.source().query(QueryBuilders.rangeQuery("price").gte(100).lte(500));
            // 3.发起请求
            testFindHotelIndex(request);
        }
    
        /**
         * @description DSL查询语法-bool查询 复合查询
         */
        @Test
        void testBoolHotelIndex() throws IOException {
            // 1.创建Request对象
            SearchRequest request = new SearchRequest("hotel");
            // 2.准备DSL
            // 2.1创建布尔查询
            BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
            //2.2 添加must条件 2.3添加filter条件
            boolQuery.must(QueryBuilders.termQuery("city", "上海"))
            .filter(QueryBuilders.rangeQuery("price").lte(600));
            //boolQuery.filter(QueryBuilders.rangeQuery("price").lte(250));
            request.source().query(boolQuery);
            // 3.发起请求
            testFindHotelIndex(request);
        }
    
    
        /**
         * @description Sort size from分页查询
         */
        @Test
        void testSortHotelIndex() throws IOException {
            int page = 1,size = 5;
            // 1.创建Request对象
            SearchRequest request = new SearchRequest("hotel");
            // 2.准备DSL
            request.source().query(QueryBuilders.matchAllQuery())
            .sort("price", SortOrder.ASC).from((page-1)*size).size(size);
            // 3.发起请求
            testFindHotelIndex(request);
        }
    
        /**
         * @description 高亮显示
         * term 词条查询
         * range 范围查询
         */
        @Test
        void testHighLightHotelIndex() throws IOException {
            // 1.创建Request对象
            SearchRequest request = new SearchRequest("hotel");
            // 2.准备DSL
            request.source().query(QueryBuilders.termQuery("city","上海"));
            //2.2 高亮查询
            request.source().highlighter(new HighlightBuilder().field("name").
            requireFieldMatch(false));
            // 3.发起请求
            testFindHotelIndex(request);
        }
    
    
       /**
         * @description ES通用数据查询
         * @param request:
         */
        public void testFindHotelIndex(SearchRequest request) throws IOException {
            // 3.发起请求
            SearchResponse response = client.search(request, RequestOptions.DEFAULT);
            //System.out.println(response);
    
            //4.解析结果
            SearchHits hits = response.getHits();
            //4.1查询总条数
            long value = hits.getTotalHits().value;
            System.out.println("es搜索到:" + value + "条数据");
            //4.2查询的结果数组
            SearchHit[] hitsHits = hits.getHits();
    
            for (SearchHit e : hitsHits) {
                //4.3 得到source
                String json = e.getSourceAsString();
                //4.4 打印
                //System.out.println("json = " + json);
                //反序列化
                HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
                //获取高亮结果
                Map<String, HighlightField> highlightFields = e.getHighlightFields();
                if(!CollectionUtils.isEmpty(highlightFields)){
                    //根据字段名获取高亮结果
                    HighlightField highlightField = highlightFields.get("name");
                    if (highlightField != null) {
                        //获取高亮值
                        String name  = highlightField.getFragments()[0].string();
                        //覆盖高亮结果
                        hotelDoc.setName(name);
                    }
                }
                System.out.println("hotelDoc = " + hotelDoc.toString());
            }
        }

    算法控制实现(广告排名靠前)

             //2.算法控制
            FunctionScoreQueryBuilder functionScoreQueryBuilder =
                    QueryBuilders.functionScoreQuery(
                    //原始数据查询,相关性算分的查询
                    boolQueryBuilder, new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{
                            //其中一个function score 元素
                            new FunctionScoreQueryBuilder.FilterFunctionBuilder(
                                    //过滤条件
                                    QueryBuilders.termQuery("isAD", true),
                                    //算分函数
                                    ScoreFunctionBuilders.weightFactorFunction(10)
                            )
                    });
            request.source().query(functionScoreQueryBuilder);

    展开全文
  • readm-data-elasticsearch(轻量级elasticsearch restClient方式连接框架) (spring-data团队暂时还没有兼容 本框架提供临时解决方案) 项目地址:https://github.com/readmlll/readm-data-elasticsearch readm-data-...

    readm-data-elasticsearch(轻量级elasticsearch restClient方式连接框架)
    (spring-data团队暂时还没有兼容 本框架提供临时解决方案)

    项目地址:https://github.com/readmlll/readm-data-elasticsearch

    readm-data-elasticsearch(轻量级elasticsearch restClient方式连接框架)

    轻量级elasticsearch restClient方式连接框架/阿里云elasticsearch连接框架

    (实测阿里云es 6.7.0没问题,注意开启公网访问,用户名密码,以及设置好白名单)

    基于spring,(spring-data-es部分注解)、elasticsearch高低版本client

    封装的rest版本es客户端. 仿照spring-data 一贯的使用方式,只需少量代码即可转换transport连接方式到restClient连接

    实现全部ElasticsearchRepository接口

    优点:

    目前最新spring-data-es 是3.1.0 Elasticsearch模板还是不支持restClient连接 (据说3.2.0 会支持)

    使用本框架 小项目,轻量级使用es的项目,快速方便的转换transport连接方式到restClient连接,还是使用spring-data-es的习惯,一套代码两种方式连接方式可跑。

    我自己的是从自己搭建的es迁移到阿里云es 6.7.0 ,阿里云不支持transport 常用操作的封装,创建文档,查询总数,批量增加修改,批量删除,高亮显示

    缺点:

    自由度不够,更多属性需要自己修改源码。

    于spring-data-es不同点总结: 1.实体对象需要继承EsEntity,必须有id字段且其为string类型 且该字段需要标注@Field注解。 2.仓库对象 不再使用继承接口,需要继承EsRepository类。 3.没有动态生成方法。 但支持ElasticsearchRepository所有接口声明的方法

    关于反射的冗余:

    本来是想写工具类的,所以EsRestClient有反射代码的冗余 介意的话自己修改。

    有点功能洁癖写着写着 还是当demo级别框架写 我自己是使用编译jar包 在别的项目中引入本"demo框架" 当做正常框架使用。 你可以抽离代码放到你的项目中,也可以选择和我一样编译jar,引入依赖。 我会在github上提供一份编译好的jar

    本框架主要类目录结构 (详细目录结构在下方)

    U0XXWZV6WH14

    项目示例和框架源码目录结构:

    common_parent为框架父级总管理项目 data为次级管理项目 es-rest为框架项目

    paper_site为 使用本框架示例 打开idea编译好common_parent项目 安装jar到本地

    ​ 再打开paper_site项目(添加好依赖) ​ 填写好yml配置信息 运行readm.paper.PaperApplicationTests.contextLoads 测试方法, ​ 即可自动创建es文档 和相关测试代码 (注意打开相关注释等等)

    U0XXWZV6WH14 U0XXWZV6WH14

    在这里插入图片描述
    文档对象声明 和 其字段声明

    U0XXWZV6WH14

    仓库对象定义

    U0XXWZV6WH14

    测试仓库方法

    U0XXWZV6WH14

    展开全文
  • @SpringBootTest @RunWith(SpringRunner.class) public class Searchtest { @Autowired RestHighLevelClient client; @Autowired RestClient restClient; ...
  • 最近公司领导让我研发使用rabbitMq 通过 logstash 将数据传输保存到elasticsearch的需求。 工作刚刚忙完,公司用的主要框架是spring boot。 下面跟小伙伴们分享一下,spring boot 集成 elasticsearchs 的详细配置...
  • 版本:elasticsearch 7.13.4 1. 声明 当前内容主要为使用RestClient以及使用sql方式进行查询操作,主要参考官方文档 主要使用_sql方式进行查询 2. 主要demo public static void main(String[] args) throws ...
  • Es版本,6.5.4) 前提准备,首先建立mapping POST http://47.101.167.46:9200/hello_es/doc/_mapping { "properties": { "name": { "type": "text", "analyzer":"ik_max_word", ...
  • Springboot 使用 RestClient 集成低版本 elasticsearch 1.引入依赖 <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client</artifactId&...
  • elasticsearch 工具 RESTClient

    千次阅读 2018-07-10 17:39:15
    上篇文章写了如何在win 下安装es,犹豫是初学者,想知道怎么来操作查了写文档,网上推荐了几...现在教大家如何用他去调用我们的elasticsearch ,大神请略。OK,我们简单的试一个。接下来用命令创建个index。请求方法...
  • <artifactId>elasticsearch-rest-high-level-clientartifactId> <version>7.3.0version> dependency> 配置application.yml testelasticsearch: elasticsearch: hostlist: 192.168.247.130:9200 #多个结点用逗号分隔 ...
  • elasticsearch-7.0.1/client/rest/src/main/java/org/elasticsearch/client/RestClient.java public class RestClient implements Closeable { //...... /** * Select nodes to try and sorts them so that ...
  • 本文主要研究一下Elasticsearch RestClient的RequestLogger RequestLogger elasticsearch-7.0.1/client/rest/src/main/java/org/elasticsearch/client/RequestLogger.java final class RequestLogger { private ...
  • RestClient 类客户端 5种请求方式 public class EsRestClient { private static final String PUT = "PUT"; private static final String POST = "POST"; private static final String GET = "GET"; ...
  • 本文介绍Elasticsearch的Java Client的原理、版本兼容性以及使用示例,帮助您快速使用Java客户端与Elasticsearch集群进行交互,完成检索、分析等相关业务。 Transport Client迁移至REST Client Transport Client随着...
  • java.io.IOException: listener timeout after waiting for [30000] ms at org.elasticsearch.client.RestClient$SyncResponseListener.get(RestClient.java:660) at org.elasticsearch.client.RestClient.p...
  • Elasticsearch Rest-Client使用教程

    千次阅读 2018-11-04 13:50:56
    Rest-Client使用教程DSL ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。介绍详解案例之Rest-Client REST客户端,通过http与集群交互,用户自定义...
  • Elasticsearch】学习笔记-p3(RestClient操作文档)

    千次阅读 多人点赞 2021-11-18 17:24:32
    文章目录RestClient操作文档1.初始化RestClient2.索引库操作2.1 创建索引库2.2 删除索引库2.3 判断索引库是否存在...在elasticsearch提供的API中,与elasticsearch一切交互都封装在一个名为RestHighLevelClient的类中
  • esElasticsearch)--Java REST Client解析

    千次阅读 2019-04-01 21:28:06
    ES提供了两种java的API对数据进行ES集群操作:TransportClient,Java REST Client。但是有以下几点需要注意: 计划在7中删除TransportClient客户端,并在8中完全删除它。 Java REST Client客户端目前支持更常用的...
  • 自用代码,不喜勿喷,感谢指正。(仅供参考,仅供参考,仅供参考。) maven: <!-- 引入es依赖包 --> <...org.elasticsearch.client</groupId> <artifactId>elasticse...
  • 导包 导包可以根据 文档 里导入依赖 这里就不写依赖了 批量新增文档 package com.leyou.es;...import org.elasticsearch.action.bulk.BulkRequest; import org.elasticsearch.action.bulk.BulkResponse; import
  • Elasticsearch 分布式搜索引擎 -- RestClient操作索引库
  • 我们要将数据库的数据查询出来,写入elasticsearch中。 索引库实体类 数据库查询后的结果是一个Hotel类型的对象。结构如下: @Data @TableName("tb_hotel") public class Hotel { @TableId(type = IdType.INPUT) ...
  • RestClient实现Elasticsearch的简单操作

    千次阅读 2022-03-27 13:05:23
    RestClient client = EsConfig.initClient(); Response response = client.performRequest(getRequest); client.close(); System.out.println(EntityUtils.toString(response.getEntity())); } /** * 查询所有的...
  • 官方文档地址:https://www.elastic.co/guide/en/elasticsearch/client/index.html 其中的Java Rest Client又包括两种: Java Low Level Rest Client Java High Level Rest Client 这里使用的是Java HighLevel ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,328
精华内容 2,531
关键字:

elasticsearch restclient