模仿别人的网站,安徽建工集团招标信息集采平台,WordPress仿站培训,网络做推广公司SpringBoot与ES7实现多条件搜索 利用Kibana内置的航班数据#xff0c;查询从威尼斯到中国按票价升序排列的前10条航班数据。 第一步#xff0c;新建SpringBoot功能#xff0c;pom.xml引入四个依赖。
dependencygroupIdorg.elasticsearch.client/groupI…SpringBoot与ES7实现多条件搜索 利用Kibana内置的航班数据查询从威尼斯到中国按票价升序排列的前10条航班数据。 第一步新建SpringBoot功能pom.xml引入四个依赖。
dependencygroupIdorg.elasticsearch.client/groupIdartifactIdelasticsearch‐rest‐high‐level‐client/artifactIdversion7.9.3/version/dependencydependencygroupIdorg.elasticsearch.client/groupIdartifactIdelasticsearch‐rest‐client/artifactIdversion7.9.3/version/dependencydependencygroupIdorg.elasticsearch/groupIdartifactIdelasticsearch/artifactIdversion7.9.3/version/dependencydependencygroupIdcom.google.code.gson/groupIdartifactIdgson/artifactIdversion2.8.6/version
/dependencyelasticsearch-rest-high-level-client是Elastic官方提供的高级REST客户端它对ES的RESTful API进行封装使用最简化的方式处理Java与ES之间的交互。相较SpringBoot提供的spring-boot-starter-data-elasticsearchelasticsearch-rest-high-level-client提供了更灵活的使用方法以及与官方同步更新的支持。
第二步开发ES应用程序实现业务逻辑。
SpringBootTest
public class FlightIndexQueryTestor {Testpublic void query() {//声明RestHighLevelClient对象RestHighLevelClient client null;try {//********************Part1 构建客户端创建请求 ********************//实例化RestHighLevelClient对象,传入IP端口client new RestHighLevelClient(RestClient.builder(new HttpHost(192.1 68.31.105, 9200)));//构建查询请求指定索引为kibana_sample_data_flightsSearchRequest request neSearchRequest(kibana_sample_data_flights);//********************Part2 组织查询条件设置排序、分页等选项 ******************//构建BoolQueryBuilder即布尔查询组织多条件检索BoolQueryBuilder booleanQueryBuilder QueryBuilders.boolQuery();//设置起始城市为威尼斯booleanQueryBuilder.must(QueryBuilders.termQuery(OriginCityName, Veice));//设置终点站为中国两个条件必须同时成立因此使用must22booleanQueryBuilder.must(QueryBuilders.termQuery(DestCountry, CN));//利用SearchSourceBuilder构建附加选项如排序、分页、汇总等SearchSourceBuilder searchSourceBuilder new SearchSourceBuilder();//将Boolean查询代入searchSourceBuildersearchSourceBuilder.query(booleanQueryBuilder);//分页选项起始0行searchSourceBuilder.from(0);//截取前10行searchSourceBuilder.size(10);//开启命中统计不分页时总行数这一项设置为true否则默认ES的记录总数上限为10000searchSourceBuilder.trackTotalHits(true);//按平均票价升序排列searchSourceBuilder.sort(AvgTicketPrice, SortOrder.ASC);//设置当前查询请求的筛选、分页、排序条件request.source(searchSourceBuilder);//********************Part3 执行查询封装离线集合 ********************//执行查询得到查询响应对象SearchResponse response client.search(requestRequestOptions.DEFAULT);//得到查询命中的文档集合SearchHit[] hits response.getHits().getHits();//离线集合ListMapString, Object list new ArrayList();//序列化工具类Gson gson new Gson();//遍历结果for (SearchHit hit : hits) {//得到每一份文档的JSON数据String json hit.getSourceAsString();//利用Gson的TypeToken类将JSON反序列化为Map对象MapString, Object doc gson.fromJson(json, new TypeTokenLinkedHashMapString, Object() {}.getType());//将Map放入集合list.add(doc);//打印结果System.out.println(doc);}//查询不分页时命中的记录总数long count response.getHits().getTotalHits().value;System.out.println(符合条件文档总量为 count);} catch (IOException e) {throw new IllegalStateException(e);} finally {if (client ! null) {try {//********************Part4 关闭数据连接 ********************//关闭客户端连接client.close();} catch (IOException e) {}}}}
}