ElasticSearch 实战:查询Sort(查询排序)

这篇具有很好参考价值的文章主要介绍了ElasticSearch 实战:查询Sort(查询排序)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Elasticsearch中,查询排序(Sort)功能允许用户控制搜索结果的返回顺序。这有助于根据特定字段的值对匹配文档进行升序(asc)或降序(desc)排列。以下是如何在实战中使用Elasticsearch查询排序的示例:

一、基本排序

**1. 在URL参数中指定排序
GET /my_index/_search?sort=title:asc,body:text

此请求将按照title字段的值升序排序,如果title字段值相同,则按照body字段的文本相关性排序。

**2. 在请求体中指定排序
POST /my_index/_search
{
  "sort": [
    { "title": { "order": "asc" } },
    { "body": { "order": "text" } }
  ]
}

此请求体结构与URL参数形式等效,但提供了更丰富的排序选项。

二、多字段排序

可以同时指定多个字段进行排序,Elasticsearch会依次按照字段列表的顺序进行比较:

POST /my_index/_search
{
  "sort": [
    { "release_date": { "order": "desc" } },
    { "rating": { "order": "desc" } }
  ]
}

这个查询首先按照release_date字段降序排序,对于release_date相同的文档,再按照rating字段降序排序。

三、复杂排序

Elasticsearch支持对数值、日期、地理位置、文本等各类字段进行排序,并提供了多种高级选项:

**1. 数值排序
POST /my_index/_search
{
  "sort": [
    { "popularity": { "order": "desc", "unmapped_type": "long" } }
  ]
}

这里指定了popularity字段降序排序,并设置了unmapped_type以防字段未映射为数值类型时的错误。

**2. 日期排序
POST /my_index/_search
{
  "sort": [
    { "created_at": { "order": "desc", "format": "strict_date_optional_time_nanos" } }
  ]
}

created_at字段进行降序排序,并指定日期格式。

**3. 地理位置排序
POST /my_index/_search
{
  "sort": [
    {
      "_geo_distance": {
        "pin.location": [-70.0, 40.0],
        "order": "asc",
        "unit": "km"
      }
    }
  ]
}

按照与点[-70.0, 40.0]的距离升序排序地理位置字段。

**4. 文本相关性排序
POST /my_index/_search
{
  "sort": [
    { "_score": { "order": "desc" } }
  ],
  "query": {
    "multi_match": {
      "query": "search terms",
      "fields": ["title^2", "body"]
    }
  }
}

在执行查询后,按照文档与查询的文本相关性( _score)降序排序。

四、排序模式

对于多值字段或数组字段,可以指定排序模式:

POST /my_index/_search
{
  "sort": [
    {
      "tags": {
        "order": "desc",
        "mode": "max"  // 取数组中最大值排序
      }
    }
  ]
}

此处对tags字段取最大值进行降序排序。

五、缺失值处理

可以指定当文档缺少排序字段时如何处理:

POST /my_index/_search
{
  "sort": [
    {
      "views": {
        "order": "desc",
        "missing": "_last"  // 缺失值排在最后
      }
    }
  ]
}

在此示例中,缺少views字段的文档将被置于排序结果的末尾。

实战总结

Elasticsearch的查询排序功能强大且灵活,支持对各类字段进行升序或降序排列,可结合多字段排序、复杂排序选项(如地理位置、文本相关性等)、排序模式以及缺失值处理策略,以满足各种业务场景的需求。在实际应用中,应根据查询目的和数据特性选择合适的排序方式,以提高用户体验和查询结果的相关性。同时,要注意排序操作可能影响查询性能,特别是在大规模数据集上对高基数字段进行排序时,可能需要结合索引优化、查询缓存等策略进行性能调优。文章来源地址https://www.toymoban.com/news/detail-853784.html

到了这里,关于ElasticSearch 实战:查询Sort(查询排序)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch如何使用以及java代码如何查询并排序ES中的数据(距离排序)

    import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.geo.GeoDistance; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.common.unit.DistanceUnit; import org.elasticsearch.common.unit.

    2024年04月12日
    浏览(51)
  • ElasticSearch 实战:ES查询索引文档的6种方法

    在Elasticsearch中,查询索引文档的方法多种多样,这里列举了6种常见的查询方法,其中包括: 简单查询(String Query) 这是最基本的全文搜索,只需在URL后面附加查询字符串即可。例如,对索引 my_index 中的所有文档执行模糊匹配查询: Match Query 类似于简单查询,但提供了更多的

    2024年04月12日
    浏览(47)
  • 【ES专题】ElasticSearch 高级查询语法Query DSL实战

    个人在学习的过程中,感觉比较吃力的地方有如下: 语法结构比较陌生 没有中文文档, 只能看英文 其他博客也比较少介绍语法结构。比如说,为什么查询中会出现 query 有ES入门基础,且想进一步学习ES基本操作的朋友 系列上一篇文章:《【ES专题】ElasticSearch快速入

    2024年02月06日
    浏览(51)
  • elasticsearch(ES)分布式搜索引擎03——(RestClient查询文档,ES旅游案例实战)

    文档的查询同样适用昨天学习的 RestHighLevelClient对象,基本步骤包括: 1)准备Request对象 2)准备请求参数 3)发起请求 4)解析响应 我们以match_all查询为例 3.1.1.发起查询请求 代码解读: 第一步,创建 SearchRequest 对象,指定索引库名 第二步,利用 request.source() 构建DSL,DSL中可

    2024年02月07日
    浏览(53)
  • Elasticsearch实战(十七)---ES搜索如何使用In操作查询及如何Distinct去除重复数据

    Elasticsearch实战-ES搜索如何使用In操作查询filter过滤及如何Distinct去除重复数据 场景: ES搜索, 获取手机号是 19000001111 或者 19000003333 后者 19000004444 的人, 并且 性别是男, 且 年龄是[20-30]的人,这种查询用mysql 如何实现 ? 在mysql中会用in查询, 但是在ES中 我们实现就是 term

    2023年04月09日
    浏览(46)
  • ElasticSearch - 根据时间区间查询

    1. 需求分析 项目需求:根据时间区间查询elasticsearch中的数据 查询最近7天的数据,前端请求路径: https://10.87.67.226/chahua/api/v1/list?endTime=1651288728694startTime=1650683928694timeScope=last7d 查询最近30天的数据,前端请求路径: endTime=1651288728694startTime=1650683928694timeScope=last30d 查询最近3个月

    2024年02月12日
    浏览(55)
  • ElasticSearch支持根据英文或者数字进行模糊查询

    提示:以下操作均在kibana7.7.0中操作。 根据es去查询商品的名称,中文查询能查询出数据,但是只输入部分英文或者数字,查询不出数据。 es中的分词器,只将全部的数字和英文做了分词,即将他们看成一个单词,所以,只输入部分英文或者数字时,不存在该部分的分词,估

    2024年02月12日
    浏览(52)
  • Java根据id对elasticsearch查询操作

    一、根据一个id查询 二、根据多个ids查询

    2024年02月12日
    浏览(53)
  • es elasticsearch kibana 根据 id 只更新部分字段

    官方文档: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html#_update_part_of_a_document 给自己记录一下: 其中 test 是索引名,需要根据实际情况替换。_update 是固定值,表示更新文档。1 是想要更新文档的主键,根据实际情况替换。 “doc” 是固定值,“my_field_name” 是被

    2024年02月13日
    浏览(44)
  • Java查询es数据,根据指定id检索(in查询),sql权限过滤,多字段匹配检索,数据排序

    Java集成Elasticsearch,进行索引数据查询,并进行sql权限过滤,指定id检索(in查询),多字段匹配检索,数据排序。由于权限过滤是根据sql语句判断当前用户或其部门可查询的数据,所以采用以下方法: 1.通过sql过滤出当前用户可查询的数据id集合idsList; 2.将当前用户可查询的

    2024年02月22日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包