网站收录目录源码,wordpress分类访问不,室内设计装修图,jsp做网站下载图片一、简介
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎#xff0c;支持各种数据类型#xff0c;包括文本、数字、地理、结构化、非结构化 ,可以让你存储所有类型的数据#xff0c;能够解决不断涌现出的各种用例。其构成如下#xff1a; 说明#xff1…一、简介
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎支持各种数据类型包括文本、数字、地理、结构化、非结构化 ,可以让你存储所有类型的数据能够解决不断涌现出的各种用例。其构成如下 说明 1、Elasticsearch由索引(Index)、类型(Type)、文档(Document)构成。index相当于数据库类型相当于数据表文档相当于表中数据只是该数据是json字符串格式每个文档(json字符串)均包含一个id。 2、7版本以后已经移除了类型(Type)概念索引(Index)里直接存储文档(Document)。 3、Kibana是ES的可视化工具相当于Navicat。 4、操作ES是给它发送请求设置端口为9200。请求地址为/index/type/数据id/操作名称(可参照文档)。 二、基本操作
说明 主要包括对ES中的文档进行增删改查。所有操作使用ES提供的API来实现。所有操作均参考官方文档中的Java High Level REST Client ›Document APIs该文档包含了所有ES的增删改查代码。官方文档中的增删改查有多种实现方式具体可参照文档这里只展示一种增删改查的方法。主要步骤导包-写配置-主启动类(这里不涉及)-业务类
**导包**参考文档下的Getting started-Maven Repository
!-- elasticsearch依赖 --dependencygroupIdorg.elasticsearch.client/groupIdartifactIdelasticsearch-rest-high-level-client/artifactIdversion7.16.2/version/dependency**写配置**参考文档下的Getting started-InitializationRequestOptions
Configuration
public class EsConfig {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();}Beanpublic RestHighLevelClient restHighLevelClient(){RestHighLevelClient client new RestHighLevelClient(RestClient.builder(new HttpHost(192.168.195.131, 9200, http)));return client;}
}1、增
参考Document APIs-Index API。包含多种增加数据的方式。这里只写一种其他写法可参照文档。
SpringBootTest
public class EsSearchTest {AutowiredRestHighLevelClient restHighLevelClient;Testvoid contextLoads(){}Testvoid indexUser() throws IOException {IndexRequest indexUser new IndexRequest(user).id(1).source(JSON.toJSONString(new User(姓名, 男, 27)), XContentType.JSON);IndexResponse indexUserRes restHighLevelClient.index(indexUser, EsConfig.COMMON_OPTIONS);System.out.println(插入user到ES返回的响应数据 indexUserRes);}}说明官方文档里的client对象是这里的restHighLevelClient对象该对象在上述配置类中已配置完成。
2、删
SpringBootTest
public class EsSearchTest {AutowiredRestHighLevelClient restHighLevelClient;Testvoid contextLoads(){}Testvoid deleteUser() throws IOException {DeleteRequest deleteUser new DeleteRequest(user, 1);DeleteResponse deleteUserRes restHighLevelClient.delete(deleteUser, EsConfig.COMMON_OPTIONS);System.out.println(删除user到ES返回的响应数据 deleteUserRes);}}3、改
SpringBootTest
public class EsSearchTest {AutowiredRestHighLevelClient restHighLevelClient;Testvoid contextLoads(){}Testvoid updateUser() throws IOException {UpdateRequest updateUser new UpdateRequest(user, 1).doc(JSON.toJSONString(new User(姓名, 女, 18)), XContentType.JSON);UpdateResponse updateUserRes restHighLevelClient.update(updateUser, EsConfig.COMMON_OPTIONS);System.out.println(修改user到ES返回的响应数据 updateUserRes);}}4、查
SpringBootTest
public class EsSearchTest {AutowiredRestHighLevelClient restHighLevelClient;Testvoid contextLoads(){}Testvoid getUser() throws IOException {GetRequest getUser new GetRequest(user, 1);GetResponse getUserRes restHighLevelClient.get(getUser, EsConfig.COMMON_OPTIONS);System.out.println(查询user到ES返回的响应数据 getUserRes);}}5、聚合查询
参考官方文档下的Java High Level REST Client -›Search APIs
(1) 需求按照年龄聚合并且请求这些年龄段的这些人的平均薪资 对应ES查询语句如下
GET bank/_search
{query: {match_all: {}},aggs: {ageAgg: {terms: {field: age,size: 100},aggs: {avgBal: {avg: {field: balance}}}}}
}(2) 对应java程序实现如下
代码均可参考官方文档很详细。
void searchBank() throws IOException {SearchRequest searchRequest new SearchRequest(bank);SearchSourceBuilder searchSourceBuilder new SearchSourceBuilder();// 构造查询条件searchSourceBuilder.query(QueryBuilders.matchAllQuery());searchSourceBuilder.aggregation(AggregationBuilders.terms(ageAgg).field(age).size(100).subAggregation(AggregationBuilders.avg(avgBal).field(balance)));searchRequest.source(searchSourceBuilder);SearchResponse searchRes restHighLevelClient.search(searchRequest, EsConfig.COMMON_OPTIONS);// 获取查询结果System.out.println(search查询结果为JSON.toJSONString(searchRes.getAggregations()));}