ElasticSearch 7.3 实战:Text字段排序、Scroll分批查询场景解析

在Elasticsearch 7.3中,对于Text字段排序和Scroll分批查询的实战场景解析如下:

Text字段排序

Elasticsearch中的Text字段默认会被分析为词项,并不会保留原始的完整文本,因此无法直接对Text字段进行排序。如果想要对包含全文内容的字段进行排序,正确的做法是为该字段设置一个 .keyword 子字段,该子字段会作为一个未分析的Keyword类型字段,用于排序或聚合操作。

例如,对于一个名为description的Text字段,可以在映射中加入一个.keyword子字段:

PUT my_index
{
  "mappings": {
    "properties": {
      "description": {
        "type": "text",
        "fields": {
          "keyword": { 
            "type": "keyword"
          }
        }
      }
    }
  }
}

然后就可以针对description.keyword字段进行排序:

GET my_index/_search
{
  "sort": [
    { "description.keyword": { "order": "asc" } }
  ]
}

Scroll分批查询场景解析

Scroll API在Elasticsearch中用于高效的批量获取大量数据,特别适用于一次性获取所有满足条件的文档或者做数据迁移的场景。相比于普通的搜索请求(分页查询),Scroll API在第一次请求时保存了上下文信息,后续的Scroll请求可以根据上下文信息直接获取下一批数据,无需重新计算分数和排序,因此性能更好。

使用Scroll API的基本步骤如下:

  1. 初始化Scroll请求并执行查询,指定一个合适的scroll生存时间和搜索条件:
POST my_index/_search?scroll=1m
{
  "size": 1000,  // 每次获取的文档数量
  "query": {
    "match_all": {}
  }
}
  1. 获取第一个Scroll结果集,响应中会包含一个_scroll_id字段:
{
  "_scroll_id": "DX...""took": 12,
  "timed_out": false,
  "_shards": {...},
  "hits": {...}  // 第一批数据
}
  1. 使用_scroll_id执行Scroll请求获取下一批数据:
POST /_search/scroll
{
  "scroll": "1m",  // 继续使用之前设定的生存时间
  "scroll_id": "DX..."
}

重复步骤3直到获取完所有数据或者达到预期的文档数量。需要注意的是,Scroll请求会一直占用集群资源,直到Scroll会话超时,所以在完成数据读取后,应使用Clear Scroll API清除Scroll会话以释放资源:

DELETE /_search/scroll
{
  "scroll_id": ["DX..."]  // 清除多个Scroll ID时可传入数组
}
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值