个人名片:
博主:酒徒ᝰ.
个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志:三人行,必有我师焉。
本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 点击观看
目录
- 四、黑马旅游案例
-
- [4. 排序](#4. 排序)
四、黑马旅游案例
4. 排序
在Elasticsearch中,可以使用sortBy参数对搜索结果进行排序。sortBy参数用于指定排序的字段,以及排序的顺序。
sortBy参数可以接受一个数组,其中每个元素表示一个排序字段。在每个元素中,你可以指定以下参数:
- 排序字段名(例如date)。
- 排序顺序。这是可选的,默认是升序(asc)。
- 排序模式。这是可选的,用于指定排序的方式。例如,min表示按照最小值排序,max表示按照最大值排序。这是可选的,默认值取决于字段的类型。
- 其他排序参数。例如,对于地理数据类型字段,可以使用geo_distance参数进行地理距离排序。
需要注意的是,Elasticsearch中的排序是影响查询性能的重要因素之一。因此,在执行排序查询时,应该根据具体情况选择合适的排序字段和排序参数,以提高查询的性能和效率。
在页面上,还有一种排序
测试后,发现与SortBy相关
修改buildBasicQuery
java
private void buildBasicQuery(RequestParams params, SearchRequest request) {
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
String key = params.getKey();
if (key == null || "".equals(key)) {
boolQuery.must(QueryBuilders.matchAllQuery());
}else {
boolQuery.must(QueryBuilders.matchQuery("all", key));
}
String city = params.getCity();
if (city != null && !"".equals(city)){
boolQuery.filter(QueryBuilders.termQuery("city", city));
}
String brand = params.getBrand();
if (brand != null && !"".equals(brand)){
boolQuery.filter(QueryBuilders.termQuery("brand", brand));
}
String starName = params.getStarName();
if (starName != null && !"".equals(starName)){
boolQuery.filter(QueryBuilders.termQuery("starName", starName));
}
Integer maxPrice = params.getMaxPrice();
Integer minPrice = params.getMinPrice();
if (maxPrice != null && minPrice != null) {
boolQuery.filter(QueryBuilders.rangeQuery("price")
.gte(minPrice)
.lte(maxPrice));
}
String location = params.getLocation();
if (location != null && !"".equals(location)){
request.source().sort(SortBuilders
.geoDistanceSort("location", new GeoPoint(location))
.order(SortOrder.ASC)
.unit(DistanceUnit.KILOMETERS)
);
}
String sortBy = params.getSortBy();
if (sortBy.equals("score")){
request.source().sort(sortBy, SortOrder.DESC);
}else if (sortBy.equals("price")){
request.source().sort(sortBy, SortOrder.ASC);
}
FunctionScoreQueryBuilder functionScoreQuery =
QueryBuilders.functionScoreQuery(
boolQuery,
new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{
new FunctionScoreQueryBuilder.FilterFunctionBuilder(
QueryBuilders.termQuery("isAD", true),
ScoreFunctionBuilders.weightFactorFunction(10)
)
}
);
request.source().query(functionScoreQuery);
int page = params.getPage(), size = params.getSize();
request.source().
from((page-1)*page).size(size);
}
总结:
- 优势:
自动维护数据的分布到多个节点的索引的建立,还有搜索请求分布到多个节点的执行;自动维护数据的冗余副本,保证说,一些机器宕机了,不会丢失任何的数据;封装了更多的高级功能,以给我们提供更多高级的支持,让我们快速的开发应用,开发更加复杂的应用:复杂的搜索功能,聚合分析的功能,比如基于地理位置的搜索等。- 作用:
SortBy是Elasticsearch中的排序参数,用于对搜索结果进行排序。它允许你根据指定的字段对搜索结果进行排序,可以接受一个数组,其中每个元素表示一个排序字段。
SortBy还支持多字段排序。你可以按照多个字段对搜索结果进行排序,每个字段都可以设置不同的排序顺序和模式。这使得你可以根据多个因素来排序搜索结果,例如先按照时间排序,再按照价格排序等。
SortBy可以与其他查询参数一起使用,例如Query和Filter。你可以在Query或Filter查询中使用SortBy参数来对搜索结果进行排序。这使得你可以在查询数据的同时对结果进行排序,从而获得更准确的结果。