主要知识点

1、es分页

2、deep paging

 
 

一、es分页语法

size,from 这两个关键字

GET /_search?size=10 指定每页10条数据

GET /_search?size=10&from=0 指定每页10条数据,并从第0条数据开始

GET /_search?size=10&from=20 指定每页10条数据,并从第20条数据开始

注意size,from在前在后都没有关系。

 
 

二、es分页实例

1、先检查数据

GET /test_index/test_type/_search

结果是:

"hits": {

"total": 9,

"max_score": 1,

我们假设将这9条数据分成3页,每一页是3条数据,

 
 

GET /test_index/test_type/_search?from=0&size=3

结果是:

{

"took": 2,

"timed_out": false,

"_shards": {

"total": 5,

"successful": 5,

"failed": 0

},

"hits": {

"total": 9,

"max_score": 1,

"hits": [

{

"_index": "test_index",

"_type": "test_type",

"_id": "8",

"_score": 1,

"_source": {

"test_field": "test client 2"

}

},

{

"_index": "test_index",

"_type": "test_type",

"_id": "6",

"_score": 1,

"_source": {

"test_field": "tes test"

}

},

{

"_index": "test_index",

"_type": "test_type",

"_id": "4",

"_score": 1,

"_source": {

"test_field": "test4"

}

}

]

}

}

 
 

第一页:id=8,6,4

GET /test_index/test_type/_search?from=3&size=3

第二页:id=2,自动生成,7

GET /test_index/test_type/_search?from=6&size=3

第三页:id=1,11,3

可以看出,es分页是以_source排序,不是以id排序

 
 

三、deep paging

1、什么是deep paging

简单来说就是搜索的特别深,假如说现在es中有6000条数据,分别存在3个primary shard中,要在这6000条数据中搜索中第100页的数据(每页10条),这种情况就是deep paging,

2、deep paging的做法

最常想到的做法是,在每个shard中搜索1000到1010这10条数据,然后用这30条数据排序,排序之后取10条数据就是要搜索的数据,这种做法是错的,因为3个shard中的数据的_source分数不一样,可能这某一个shard中第一条数据的_source分数比另一个shard中第1000条都要高,所以在每个shard中搜索1000到1010这10条数据然后排序的做法是不正确的,鉴于这种情况,正确的做法是把这三个shard中的0到1010条数据全部搜索出来(按排序顺序),然后全部返回给coordinate node,由coordinate node按_source分数排序后,得到想要的结果。然后返回给客户端。

3、deep paging性能问题

(1)耗费网络带宽,因为搜索过深的话,各shard要把数据传送给coordinate node,这个过程是有大量数据传递的,消耗网络,

(2)消耗内存,各shard要把数据传送给coordinate node,这个传递回来的数据,是被coordinate node保存在内存中的,这样会大量消耗内存。

(3)消耗cpu coordinate node要把传回来的数据进行排序,这个排序过程很消耗cpu.

鉴于deep paging的性能问题,所以在实际工作中应尽量减少使用。

36.分页及deep paging的更多相关文章

  1. Elasticsearch系列---搜索分页和deep paging问题

    概要 本篇从介绍搜索分页为起点,简单阐述分页式数据搜索与原有集中式数据搜索思维方式的差异,就分页问题对deep paging问题的现象进行分析,最后介绍分页式系统top N的案例. 搜索分页语法 El ...

  2. ES 25 - Elasticsearch的分页查询及其深分页问题 (deep paging)

    目录 1 分页查询方法 2 分页查询的deep paging问题 1 分页查询方法 在GET请求中拼接from和size参数 // 查询10条数据, 默认从第0条数据开始 GET book_shop/ ...

  3. ElasticSearch(十五) _search api 分页搜索及deep paging性能问题

    1.分页搜索 语法: size,from GET /_search?size=10 GET /_search?size=10&from=0 GET /_search?size=10&f ...

  4. 游标 深度分页 deep paging

    Solr Deep Paging(solr 深分页) - ickes的专栏 - CSDN博客 https://blog.csdn.net/xl_ickes/article/details/427725 ...

  5. ElasticSearch7.3学习(十九)---- deep paging

    1.什么是deep paging 根据相关度评分倒排序,所以分页过深,协调节点会将大量数据聚合分析. 2.deep paging 性能问题 1消耗网络带宽,因为所搜过深的话,各 shard 要把数据传 ...

  6. 深分页(Deep Pagination)

    取回阶段 | Elasticsearch: 权威指南 | Elastic https://www.elastic.co/guide/cn/elasticsearch/guide/current/_fe ...

  7. Elasticsearch由浅入深(七)搜索引擎:_search含义、_multi-index搜索模式、分页搜索以及深分页性能问题、query string search语法以及_all metadata原理

    _search含义 _search查询返回结果数据含义分析 GET _search { , "timed_out": false, "_shards": { , ...

  8. elasticserach数据库深度分页查询的原理

    深度分页存在的问题 https://segmentfault.com/a/1190000019004316?utm_source=tag-newest 在实际应用中,分页是必不可少的,例如,前端页面展 ...

  9. 〈三〉ElasticSearch的认识:搜索、过滤、排序

    目录 上节回顾 本节前言 文档的搜索 URL参数条件搜索 请求体条件搜索 语法与示例: 补充: 小节总结: 文档的过滤filter 语法与举例: filter与bool constant_score ...

随机推荐

  1. mysql 日期计算,今天,明天,本周,下周,本月,下月

    --今天 DATE_FORMAT(BIRTH_DATE,'%Y-%m-%d') = CURDATE() --明天 DATE_FORMAT(BIRTH_DATE,'%Y-%m-%d') = TIMEST ...

  2. mysql-5.5 for linux源码安装

    mysql-5.5 for linux源码安装 1.使用Yum安装依赖软件包 # yum install -y gcc gcc-c++ gcc-g77 autoconf automake bison  ...

  3. windows10+arch linux双系统 uefi启动

    安装前的准备Archlinux 安装ISO镜像,下载:http://mirrors.163.com/archlinux/iso/2013.05.01/U盘一个,最好1G以上,格式化成FAT32.把下载 ...

  4. Vue项目打包部署到apache服务器

    vue项目在开发环境下,让项目运行起来,是通过npm run dev命令,原理是在本地搭建了一个express服务器. 但是在服务器上就不是这样的,必须要通npm run build命令来对整个项目进 ...

  5. MSSQL:账号无法删除方案

    1.查询 EXEC sp_who 'WIN-GBKBCVTG4CN\Administrator' 返回一个表格,其中有列[spid] 2.删除 kill spid

  6. python请求服务器时如何隐藏User-Agent

    本文结合上一篇文章“python利用有道翻译实现“语言翻译器”的功能”的实现代码,对其进行加工,实现请求服务器时隐藏User-Agent. python实现隐藏User-Agent的一般做法有两种: ...

  7. 第一课trie 树 POJ 2001

    最短前缀(Openjudge上抄的) 总时间限制: 1000ms 内存限制: 65536kB 描述 一个字符串的前缀是从该字符串的第一个字符起始的一个子串.例如 "carbon"的 ...

  8. A - Supermarket

    Problem description We often go to supermarkets to buy some fruits or vegetables, and on the tag the ...

  9. 简单ajax库

    function TuziAjax(reqType,url,fnoK, fnFail) { var xmlHttp = null; if (window.XMLHttpRequest) { xmlHt ...

  10. 小程序开发之搭建WebSocket的WSS环境(Apache+WorkerMan框架+PHP)

    最近公司的一个IoT项目用到了小程序的WSS协议环境,现在把整个的搭建开发过程分享给大家. 这里我们用的是WorkerMan框架,服务器是CentOS,Web服务器是Apache,开发语言是PHP. ...