elasticsearch13-排序


个人名片:

博主:酒徒ᝰ.
个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志:三人行,必有我师焉。

本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 点击观看

目录

四、黑马旅游案例

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);
}

总结:

  1. 优势:
    自动维护数据的分布到多个节点的索引的建立,还有搜索请求分布到多个节点的执行;自动维护数据的冗余副本,保证说,一些机器宕机了,不会丢失任何的数据;封装了更多的高级功能,以给我们提供更多高级的支持,让我们快速的开发应用,开发更加复杂的应用:复杂的搜索功能,聚合分析的功能,比如基于地理位置的搜索等。
  2. 作用:
    SortBy是Elasticsearch中的排序参数,用于对搜索结果进行排序。它允许你根据指定的字段对搜索结果进行排序,可以接受一个数组,其中每个元素表示一个排序字段。
    SortBy还支持多字段排序。你可以按照多个字段对搜索结果进行排序,每个字段都可以设置不同的排序顺序和模式。这使得你可以根据多个因素来排序搜索结果,例如先按照时间排序,再按照价格排序等。
    SortBy可以与其他查询参数一起使用,例如Query和Filter。你可以在Query或Filter查询中使用SortBy参数来对搜索结果进行排序。这使得你可以在查询数据的同时对结果进行排序,从而获得更准确的结果。
相关推荐
woshiabc11119 分钟前
windows安装Elasticsearch及增删改查操作
大数据·elasticsearch·搜索引擎
arnold663 小时前
探索 ElasticSearch:性能优化之道
大数据·elasticsearch·性能优化
成长的小牛2336 小时前
es使用knn向量检索中numCandidates和k应该如何配比更合适
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客7 小时前
Elasticsearch:什么是查询语言?
大数据·数据库·elasticsearch·搜索引擎·oracle
启明真纳8 小时前
elasticache备份
运维·elasticsearch·云原生·kubernetes
AI_Mind14 小时前
Gemini 2.0:面向智能体时代的全新 AI 模型
人工智能·搜索引擎
幽弥千月17 小时前
【ELK】ES单节点升级为集群并开启https【亲测可用】
elk·elasticsearch·https
运维&陈同学17 小时前
【Elasticsearch05】企业级日志分析系统ELK之集群工作原理
运维·开发语言·后端·python·elasticsearch·自动化·jenkins·哈希算法
Y编程小白1 天前
Git版本控制工具--基础命令和分支管理
大数据·git·elasticsearch
jingling5551 天前
如何使用免费资源--知网篇
开发语言·经验分享·搜索引擎·pdf·开源