• java集成ElasticSearch常用的API使用


      最近在研究Solr的替代解决方案,就研究了solr的同门师弟elasticsearch,同门是因为他俩都基于Lucene。

      ElasticSearch具有实时热更新,分布式,大数据量级的优势,相比于solr,肯定前景更开阔一些。

      先说部署,ElasticSearch官网直接下载最新版,我用的是7.10.1版本,直接进入bin目录下的ElasticSearch.bat双击运行即可,完事访问本地9200端口测试是否成功。

      head插件和Kibana插件还有ik分词器根据自己需求下载,head用于ElasticSearch索引及文档数据的可视化,kibana用于Rest命令测试,ik分词器帮助进行中文分词检索匹配

      话不多说,直接上代码

      先上maven依赖:

      我为了方便,引入了fastjson和mybatis generator,你根据自己需要

        <properties>
            <java.version>1.8</java.version>
            <!-- 指定ElasticSearch和自己部署的版本一致-->
            <elasticsearch.version>7.10.1</elasticsearch.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.1.4</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.70</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>com.microsoft.sqlserver</groupId>
                <artifactId>mssql-jdbc</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-core</artifactId>
                <version>1.3.2</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>

      然后是获取 RestHighLevelClient

            RestHighLevelClient client = new RestHighLevelClient(
                    RestClient.builder(new HttpHost("127.0.0.1",9200,"http")));
    

      创建索引:

        /**
         * 创建索引(库)
         */
        @Test
        void CreateIndex() throws IOException {
            //创建请求
            CreateIndexRequest request = new CreateIndexRequest("testdemo");
            //下面是给这个索引添加映射规则(可选)
    //        XContentBuilder mapping = JsonXContent.contentBuilder()
    //                .startObject()
    //                    .startObject("properties")
    //                        //code字段
    //                        .startObject("code")
    //                            .field("type","keyword")
    //                        .endObject()
    //                        //name字段
    //                        .startObject("name")
    //                            .field("type","text")
    //                        .endObject()
    //                    .endObject()
    //                .endObject();
    //        request.mapping(mapping);
            
            CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
            System.out.println(createIndexResponse);
    
        }
    

      删除索引:

        /**
         * 删除索引
         */
        @Test
        void testdeleteindex() throws IOException {
            DeleteIndexRequest request = new DeleteIndexRequest("u_file1_029");
            AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
            System.out.println(delete.isAcknowledged());
        }

      判断索引是否存在:

        /**
         * 获取索引
         */
        @Test
        void testgetindex() throws IOException {
            GetIndexRequest request = new GetIndexRequest("testdemo");
            boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
            System.out.println(exists);
        }

      插入文档:

        /**
         * 添加document数据
         */
        @Test
        void inputalltable() throws IOException {
            IndexRequest indexRequest = new IndexRequest("testdemo");
            //设置你想要的id,不设置会自动生成随机uuid
            indexRequest.id("");
            //测试数据
            Map map= new HashMap();
            map.put("code","xxxxxxx“);
            map.put("name","xxxxxx");
            indexRequest.source(JSON.toJSONString(map), XContentType.JSON);
            IndexResponse response = client.index(indexRequest, RequestOptions.DEFAULT);
        }        

      批量添加文档:

        /**
         * bulkcreateDOC
         * 批量导入文档
         */
        @Test
        void CreateBulk() throws IOException {
            
            List<Map<String, String>> gettabledata = generolService.gettabledata(“testdemo”);
            if(gettabledata.size()!=0){//判断是否为空集合
                
                BulkRequest bulkRequest = new BulkRequest();
                for(int i=(tem-1)*50000;i<gettabledata.size();i++){
                    bulkRequest.add(
                            new IndexRequest("testdemo")
                                    .id(gettabledata.get(i).get("id"))
                                    .source(JSON.toJSONString(gettabledata.get(i)),XContentType.JSON)
                    );
                }
                client.bulk(bulkRequest,RequestOptions.DEFAULT);
                
            }
    
        }

      删除文档:

        /**
         * 删除文档
         */
        @Test
        void deleteDOCtest() throws IOException {
            //第一个参数为index名称,第二个参数是文档DOC的id值
            DeleteRequest request = new DeleteRequest("testdemo","xxxxxxxx");
            DeleteResponse delete = client.delete(request, RequestOptions.DEFAULT);
            System.out.println(delete.toString());
        }

      修改更新文档:

        /**
         * 更新文档
         */
        @Test
        void updateDOctest() throws IOException {
            UpdateRequest request = new UpdateRequest("testdemo","xxxxxxxxx");
            Map map= new HashMap();
            map.put("code","xxxxxxx“);
            map.put("name","xxxxxx");
            request.doc(JSON.toJSONString(map),XContentType.JSON);
            UpdateResponse update = client.update(request, RequestOptions.DEFAULT);
            System.out.println(update.status());
            
    
        }

      简单的检索(更复杂的检索请自行官网查询文档,包括match、trem、profix等和bool,must,should嵌套查询,from、size等分页)

        /**
         * 查询
         */
        @Test
        void select() throws IOException {
            SearchRequest searchRequest = new SearchRequest("testdemo");
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    //        MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
            QueryStringQueryBuilder queryBuilder = QueryBuilders.queryStringQuery("xx");
            searchSourceBuilder.query(queryBuilder);
            searchRequest.source(searchSourceBuilder);
            SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
    
            System.out.println(search.getHits().getTotalHits());
            
        }

      

      

  • 相关阅读:
    Druid 介绍及配置
    LoadRunner性能测试入门教程
    Java 程序员必须收藏的资源大全
    JProfiler 入门教程
    Web网站的性能测试工具
    职场中必须知道的8条规则
    作为测试人员需要的技能和工作要求
    web性能监控与分析
    Java应用常用性能分析工具
    mockito简单教程
  • 原文地址:https://www.cnblogs.com/Monroyhahaha/p/14206914.html
Copyright © 2020-2023  润新知