美文网首页关于搜索,我们聊聊ELK
elasticsearch 搜索结果的扫描 scan和滚动 sc

elasticsearch 搜索结果的扫描 scan和滚动 sc

作者: 朱小虎XiaohuZhu | 来源:发表于2015-10-29 17:39 被阅读1906次

Neil Zhu,简书ID Not_GOD,University AI 创始人 & Chief Scientist,致力于推进世界人工智能化进程。制定并实施 UAI 中长期增长战略和目标,带领团队快速成长为人工智能领域最专业的力量。
作为行业领导者,他和UAI一起在2014年创建了TASA(中国最早的人工智能社团), DL Center(深度学习知识中心全球价值网络),AI growth(行业智库培训)等,为中国的人工智能人才建设输送了大量的血液和养分。此外,他还参与或者举办过各类国际性的人工智能峰会和活动,产生了巨大的影响力,书写了60万字的人工智能精品技术内容,生产翻译了全球第一本深度学习入门书《神经网络与深度学习》,生产的内容被大量的专业垂直公众号和媒体转载与连载。曾经受邀为国内顶尖大学制定人工智能学习规划和教授人工智能前沿课程,均受学生和老师好评。

scan 搜索类型和 scroll API 会一起用来从 elasticsearch 中获得大量文档,不会受到深度分页(deep pagination)的影响。

  • scroll 滚动搜索 允许我们进行一个初始搜索并保证批量从 Elasticsearch 中拉取结果直到没有更多结果。这看起来有点像传统数据库中的 cursor。滚动搜索会及时取一个快照。这不会受到后来对索引的改变的影响。通过保持旧数据来实现,所以可以看做是保持了在开始搜索时候的一个“视图”。
  • scan 深度分页的最耗资源的部分就是对结果的整体排序,但是如果我们关闭排序,那么可以消耗极少资源返回所有的文档。对这个情况,我们可以使用 scan 搜索类型。scan 告诉 elasticsearch 不去排序,而是仅仅从每个仍然有结果的分片中返回下一批(batch)。

要使用 scan-and-scroll,我们执行设置 search_typescan 的搜索请求,然后传递一个 scroll 参数告诉 elasticsearch 需要保持 scroll 开放多久:

GET /old_index/_search?search_type=scan&scroll=1m ...(1)
{
    "query": { "match_all": {}},
    "size": 1000
}
  • (1) 将 scroll 开放 1 分钟

对该请求的反应不会包含任何的命中 hits,但是会包含一个 _scroll_id,这是一个 64 位的字符串编码。现在我们将 _scroll_id 传递给 _search/scroll 来检索结果的第一批:

GET /_search/scroll?scroll=1m                                             ...(1)
c2Nhbjs1OzExODpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzExOTpRNV9aY1VyUVM
4U0NMd2pjWlJ3YWlBOzExNjpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzExNzpRNV9
aY1VyUVM4U0NMd2pjWlJ3YWlBOzEyMDpRNV9aY1VyUVM4U0NMd2pjWlJ3YWlBOzE
7dG90YWxfaGl0czoxOw==                                                     ...(2)
  • (1) 保持 scroll 再开放一分钟|
  • (2) _scroll_id 可以通过 body,URL,或者 query 参数 进行传递

注意到,我们这里又指定了 ?scroll=1m。这个 scroll 终结时间在我们每执行一次 scroll 请求时刷新,所以仅需要给我们足够的时间来处理当前结果的批,而不是整个匹配查询的文档。

这个scroll的响应包含第一批的结果。尽管我们指定了 size1000,我们获得了更多的文档。在 scan 的时候,size 作用在每个分片上,所以你将会在每批得到最大为 size * number_of_primary_shards 的文档。

注意:scroll 请求同样会返回一个新的 _scroll_id。每次我们产生下一个 scroll 请求,我们必须传递上一个 scroll 请求的 _scroll_id

若没有更多的命中,我们就处理完了所有匹配的文档。

注意:有些official Elasticsearch clients 提供 scan-and-scroll 帮助方法来提供易用的封装。

相关文章

  • elasticsearch 搜索结果的扫描 scan和滚动 sc

    Neil Zhu,简书ID Not_GOD,University AI 创始人 & Chief Scientist...

  • scan与过滤器用法

    1. scan扫描 get:查询一条结果scan可以查询多条 注意:scan和get的结果获取本质上一样,Tabl...

  • 扫描(SCAN)

    这个机制支持决定有效的BSS的特征。 STA or AP请求启用对STA以后可以选择加入的潜在的BSS的调查。 基...

  • KNN算法-4-算法优化-KD树

    KD树 KNN算法的重要步骤是对所有的实例点进行快速k近邻搜索。如果采用线性扫描(linear scan),要计算...

  • Zigzag Scan

    zigzag扫描 Zigzag Scan是一种扫描矩阵的方法, 类似的还有光栅扫描等。大多用到图像和视频编码中。 ...

  • HBase扫描操作Scan

    HBase扫描操作Scan 1 介绍 扫描操作的使用和get()方法类似。同样,和其他函数类似,这里也提供了Sca...

  • HBase读操作

    对于HBase而言读取操作有两种,即get和scan。按实现上来看的话,get请求也是一种scan请求,相当于sc...

  • 树莓派使用命令行连接WiFi

    首先可以使用iwlist scan命令扫描wifi热点: sudo iwlist scan 然后编辑/etc/wp...

  • Redis原理及实践之Scan

    3. scan vs keys keys扫描key的复杂度为O(N),同样scan的复杂度也为O(n) scan提...

  • Elasticsearch(ES)的滚动搜索与批量操作

    1. 概述 今天我们来聊一下Elasticsearch(ES)的滚动搜索与批量操作。 2. Elasticsear...

网友评论

    本文标题:elasticsearch 搜索结果的扫描 scan和滚动 sc

    本文链接:https://www.haomeiwen.com/subject/fucfhttx.html