自学笔记SpringBoot集成ElasticSearch详解

2022年6月3日12:05:33

一、ElasticSearch介绍:

Elaticsearch,简称为ES,ES是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别(大数据时代)的数据。ES由 Java 语言开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTFULL API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。据国际权威的数据库产品评测机构 DB Engines 的统计,在2016 年1月,ElasticSearch 已超过 Solr 等,成为排名第一的搜索引擎类应用。

二、ElasticSearch安装:

先安装前段环境
Node.js
自学笔记SpringBoot集成ElasticSearch详解

查看环境变量和版本
自学笔记SpringBoot集成ElasticSearch详解

打开
自学笔记SpringBoot集成ElasticSearch详解

访问测试!
自学笔记SpringBoot集成ElasticSearch详解

三、Kibana的安装

安装淘宝镜像
自学笔记SpringBoot集成ElasticSearch详解

查看cnpm是否真安装成功
自学笔记SpringBoot集成ElasticSearch详解

下载依赖
自学笔记SpringBoot集成ElasticSearch详解

启动
自学笔记SpringBoot集成ElasticSearch详解

访问
自学笔记SpringBoot集成ElasticSearch详解

解决跨域问题
自学笔记SpringBoot集成ElasticSearch详解

连接变绿!
自学笔记SpringBoot集成ElasticSearch详解

Kibana可以将es的数据通过友好的页面展示出来 ,提供实时分析的功能。

可以见到,默认端口 5601
自学笔记SpringBoot集成ElasticSearch详解

访问进入页面
自学笔记SpringBoot集成ElasticSearch详解

访问测试
自学笔记SpringBoot集成ElasticSearch详解

四、配置ik分词器

将ik放入ElasticSearch中
自学笔记SpringBoot集成ElasticSearch详解

重启es,发现加入插件(ik)
自学笔记SpringBoot集成ElasticSearch详解

ik_smart 最少切分
自学笔记SpringBoot集成ElasticSearch详解

ik_max_word 最细粒度划分
自学笔记SpringBoot集成ElasticSearch详解

ik分词器增加自己的配置

字典:
自学笔记SpringBoot集成ElasticSearch详解

编写自己的配置文件注入到扩展配置中
自学笔记SpringBoot集成ElasticSearch详解
自学笔记SpringBoot集成ElasticSearch详解

再次测试
自学笔记SpringBoot集成ElasticSearch详解
自学笔记SpringBoot集成ElasticSearch详解

基本Rest风格说明
自学笔记SpringBoot集成ElasticSearch详解

PUT命令

PUT

自学笔记SpringBoot集成ElasticSearch详解
自学笔记SpringBoot集成ElasticSearch详解

失败(超时)解决办法:先把es下的jvm.options里的两个1g都改成2g,然后把kibana里的配置文件请求时间扩大一倍

单纯建索引
自学笔记SpringBoot集成ElasticSearch详解
自学笔记SpringBoot集成ElasticSearch详解
GET操作
自学笔记SpringBoot集成ElasticSearch详解
自学笔记SpringBoot集成ElasticSearch详解

启用默认的数据
自学笔记SpringBoot集成ElasticSearch详解
自学笔记SpringBoot集成ElasticSearch详解

修改更新
自学笔记SpringBoot集成ElasticSearch详解
自学笔记SpringBoot集成ElasticSearch详解

删除
自学笔记SpringBoot集成ElasticSearch详解
自学笔记SpringBoot集成ElasticSearch详解

五、Springboot集成ElasticSearch

Ⅰ.依赖

<properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target><es.version>7.9.1</es.version></properties><dependencies><!--ElasticSearch by XiaoYin--><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>${es.version}</version></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>transport</artifactId><version>${es.version}</version><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions></dependency><dependency><!-- required by elasticsearch --><groupId>org.elasticsearch.plugin</groupId><artifactId>transport-netty4-client</artifactId><version>${es.version}</version></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>${es.version}</version></dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>${es.version}</version><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion><exclusion><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId></exclusion></exclusions></dependency></dependencies>

Ⅱ.配置

@ConfigurationpublicclassElasticSearchClientConfig{@BeanpublicRestHighLevelClientrestHighLevelClient(){RestHighLevelClient client=newRestHighLevelClient(RestClient.builder(newHttpHost("127.0.0.1",9200,"http")));return client;}}

Ⅲ.基础代码

1.实现ES创建索引功能

@TestvoidtestCreateIndex()throwsIOException{//创建索引请求CreateIndexRequest request=newCreateIndexRequest("hzh_index");//客户端请求CreateIndexResponse createIndexResponse=
            client.indices().create(request,RequestOptions.DEFAULT);System.out.println(createIndexResponse);}

2.实现判断ES索引是否存在

@TestvoidtestExistIndex()throwsIOException{GetIndexRequest request=newGetIndexRequest("hzh_index");boolean exist= client.indices().exists(request,RequestOptions.DEFAULT);System.out.println(exist);}

3.实现删除ES索引功能

@TestvoidtestDeleteIndex()throwsIOException{DeleteIndexRequest request=newDeleteIndexRequest("hzh_index");AcknowledgedResponse delete= client.indices().delete(request,RequestOptions.DEFAULT);System.out.println(delete);}

4.实现使用实体类创建ES索引

@TestvoidtestAddDocument()throwsIOException{//创建对象User user=newUser("HZH",3);IndexRequest request=newIndexRequest("hzh_index");
    request.id("1");
    request.timeout(TimeValue.timeValueSeconds(1));//一秒钟
    request.timeout("1s");//将我们的数据放入json
    request.source(JSON.toJSONString(user),XContentType.JSON);//客户端发送请求IndexResponse indexResponse= client.index(request,RequestOptions.DEFAULT);System.out.println(indexResponse.toString());//System.out.println(indexResponse.status());//对应我们命令返回的状态}

5.实现判断ES的索引内部id的功能

@TestvoidtestIsExist()throwsIOException{GetRequest getRequest=newGetRequest("hzh_index","dK6jnXoBhRewEAABR0QT");//不获取返回值的上下文
    getRequest.fetchSourceContext(newFetchSourceContext(false));
    getRequest.storedFields("_none_");boolean exists= client.exists(getRequest,RequestOptions.DEFAULT);System.out.println(exists);}

6.实现获取ES对应索引的文档信息功能

@TestvoidtestGetDocument()throwsIOException{GetRequest getRequest=newGetRequest("hzh_index","1");GetResponse getResponse= client.get(getRequest,RequestOptions.DEFAULT);System.out.println(getResponse.getSourceAsString());//打印文档的内容System.out.println(getResponse);//打印全部内容}

7.实现更新文档请求功能

@TestvoidtestUpdateDocument()throwsIOException{UpdateRequest updateRequest=newUpdateRequest("hzh_index","1");
    updateRequest.timeout("1s");User user=newUser("HZH2",5);
    updateRequest.doc(JSON.toJSONString(user),XContentType.JSON);UpdateResponse update= client.update(updateRequest,RequestOptions.DEFAULT);System.out.println(update.status());}

8.实现删除文档请求功能

@TestvoidtestDeleteDocument()throwsIOException{DeleteRequest deleteRequest=newDeleteRequest("hzh_index","1");
    deleteRequest.timeout("1s");DeleteResponse delete= client.delete(deleteRequest,RequestOptions.DEFAULT);System.out.println(delete.status());}

9.实现ES的批处理请求功能

@TestvoidtestBulkRequest()throwsIOException{BulkRequest bulkRequest=newBulkRequest();
        bulkRequest.timeout("10s");List<User> lists=newArrayList<>();for(int i=0;i<=20;i++){
            lists.add(newUser("hzh",i));}//批处理请求for(int i=0;i<lists.size();i++){
            bulkRequest.add(newIndexRequest("hzh_index").id(""+(i+1)).source(JSON.toJSONString(lists.get(i)),XContentType.JSON));}BulkResponse bulkResponse= client.bulk(bulkRequest,RequestOptions.DEFAULT);System.out.println(bulkResponse.hasFailures());}

10.实现ES基础查询操作:精确匹配,匹配所有,分页

@TestvoidtestSearch()throwsIOException{SearchRequest searchRequest=newSearchRequest("hzh_index");SearchSourceBuilder searchSourceBuilder=newSearchSourceBuilder();//精确匹配//TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "hzh");//匹配所有MatchAllQueryBuilder matchAllQueryBuilder=QueryBuilders.matchAllQuery();

    searchSourceBuilder.query(matchAllQueryBuilder);//分页
    searchSourceBuilder.from(0);
    searchSourceBuilder.size(1);
    searchSourceBuilder.timeout(newTimeValue(120,TimeUnit.SECONDS));

    searchRequest.source(searchSourceBuilder);SearchResponse searchResponse= client.search(searchRequest,RequestOptions.DEFAULT);System.out.println(JSON.toJSONString(searchResponse.getHits()));System.out.println("-----------------------");int index=0;for(SearchHit documentFields:searchResponse.getHits()){
        index++;System.out.println(documentFields.getSourceAsString()+"\n");}System.out.println("index = "+index);}

11.实现ES查询所有索引功能

@TestvoidtestFindAllIndex()throwsIOException{GetAliasesRequest getAliasesRequest=newGetAliasesRequest();
    getAliasesRequest.masterNodeTimeout(newTimeValue(60,TimeUnit.SECONDS));GetAliasesResponse alias= client.indices().getAlias(getAliasesRequest,RequestOptions.DEFAULT);Map<String,Set<AliasMetadata>> aliases= alias.getAliases();for(String key: aliases.keySet()){System.out.println("Key = "+ key);}}

12.列表展示(支持同时对所需字段排序,关键字检索及分页操作)

@TestvoidtakeJsonStr()throwsIOException{SearchRequest searchRequest=newSearchRequest("hzh_index");SearchSourceBuilder searchSourceBuilder=newSearchSourceBuilder();//精确匹配TermQueryBuilder termQueryBuilder=QueryBuilders.termQuery("_id","-322inoBKIkXtm6iIwBi")
  • 作者:建桥之魂
  • 原文链接:https://blog.csdn.net/weixin_45203988/article/details/119648673
    更新时间:2022年6月3日12:05:33 ,共 7030 字。