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参数来对搜索结果进行排序。这使得你可以在查询数据的同时对结果进行排序,从而获得更准确的结果。
相关推荐
kekekka6 小时前
重塑品牌增长逻辑:专业媒体发稿服务如何让每一分预算产生长效复利?
大数据·搜索引擎·媒体
老陈头聊SEO11 小时前
长尾关键词助力扫描SEO效果的全新方法
其他·搜索引擎·seo优化
INFINI Labs19 小时前
Easysearch analysis-ik 多词典性能优化:从性能回退到分词性能提升 25%~30%
elasticsearch·性能优化·分词·performance·easysearch·ik
深念Y19 小时前
Claude Code 搜索工具失灵,用 MCP + 提示词注入绕过 tavily
网络·搜索引擎·mcp·claudecode·中转站·tavily·搜索服务器
IT飞牛20 小时前
Elasticsearch 技术调研与实践
大数据·elasticsearch·搜索引擎
从此以后自律20 小时前
Git一篇
大数据·elasticsearch·搜索引擎
超人也会哭️呀20 小时前
ES 混合检索(文本+向量)中的条件处理陷阱——当权限过滤遇到关键词查询
android·大数据·elasticsearch
做个文艺程序员1 天前
第03篇:深入 Mapping 与数据类型设计——ES Schema 设计避坑指南
大数据·elasticsearch·搜索引擎·mapping设计
铭毅天下1 天前
Easysearch 版本进化全图——从 ES 国产替代到 AI Native 搜索数据库
大数据·数据库·人工智能·elasticsearch·搜索引擎
Elastic 中国社区官方博客2 天前
在 Elasticsearch 中,存储向量查询速度最高提升 3 倍
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索