一、ElasticSearch介绍:
Elaticsearch,简称为ES,ES是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别(大数据时代)的数据。ES由 Java 语言开发并使用 Lucene 作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTFULL API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。据国际权威的数据库产品评测机构 DB Engines 的统计,在2016 年1月,ElasticSearch 已超过 Solr 等,成为排名第一的搜索引擎类应用。
二、ElasticSearch安装:
先安装前段环境
Node.js
查看环境变量和版本
打开
访问测试!
三、Kibana的安装
安装淘宝镜像
查看cnpm是否真安装成功
下载依赖
启动
访问
解决跨域问题
连接变绿!
Kibana可以将es的数据通过友好的页面展示出来 ,提供实时分析的功能。
可以见到,默认端口 5601
访问进入页面
访问测试
四、配置ik分词器
将ik放入ElasticSearch中
重启es,发现加入插件(ik)
ik_smart 最少切分
ik_max_word 最细粒度划分
ik分词器增加自己的配置
字典:
编写自己的配置文件,注入到扩展配置中
再次测试
基本Rest风格说明
PUT命令
PUT
失败(超时)解决办法:先把es下的jvm.options里的两个1g都改成2g,然后把kibana里的配置文件请求时间扩大一倍
单纯建索引
GET操作
启用默认的数据
修改更新
删除
五、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")