技术标签: ElasticSearch elasticsearch dsl
程序员小强总结的 ElasticSearch专题超全总结篇在这里:传送门
结合官网资料,做了更详细的实际使用总结。
从单机版安装到集群高可用生产环境搭建、基本概念(索引,分片,节点,倒排索引…)、DSL语法实践、分词器(内置+中文)、SpringBoot整合实战、仿京东商品搜索实战实现。
对于非深度分页,简单查询时,一般使用from和size进行分页查询
GET /student_info/_search
{
"query": {
"match_all": {
}
},
"from": 1,
"size": 2
}
常见问题:深分页问题,效率会很低,尽量避免深分页。
ES对于from+size的个数也是有限制的,默认限制二者之和不能超过1w。超过后会报错,
使用index.max_result_window:10000
作为保护措施,虽然这个参数可以修改,也可以在配置文件配置。
但是最好不要这么做,当所请求的数据总量大于1w时,应用ES游标(scroll查询)来代替from+size。如果需要深度分页对服务器压力会变大。如果确认需要设置,则需要提前预估启动内存大小。
深分页举例
scoll 游标查询,指定 scroll=时间 ,指定保存的分钟数,
第一次发起请求放回的是数据+_scroll_id ,后面通过 _scroll_id 去请求数据,适合大批量查询。
#游标查询-年龄> 18,每页2条,保存1分钟
GET /student_info/_search?scroll=1m
{
"query": {
"range": {
"age":{
"gt": 18
}
}
},
"size": 2
}
游标查询,其实是在 es 里面缓存了结果 ,然后一次一次的去取,所以发起第一次请求的时候只有 size ,没有from,后面的请求只有 scroll_id 和 scroll 时间
GET /_search/scroll
{
"scroll": "1m",
"scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAABZxIWYzcxTVZWN1BRd1NpUzg4WHg1RkYzZw=="
}
使用search_after必须添加排序"sort"条件
如下示例:指定了根据ID升序,年龄倒叙,2个排序条件,search_after中[起始ID,起始年龄]
GET /student_info/_search
{
"query": {
"match_all": {
}
},
"search_after": [
11000,20
],
"size": 2,
"sort": [
{
"_id": "asc"},
{
"age": "desc"}
]
}
请求第一页的时候,会返回sort 值,下一页的时候,把上一页 sort的值带入查询参数 search_after中
分页方式 | 性能 | 优点 | 缺点 | 使用场景 |
---|---|---|---|---|
from + size | 低 | 灵活性好,实现简单 | 深度分页问题 | 数据量比较小,能容忍深度分页问题 |
scroll | 中 | 解决了深度分页问题 | 无法反应数据的实时性维护成本高,需要维护一个 scroll_id跳页查询问题 | 海量数据的导出需要查询海量结果集的数据 |
search_after | 高 | 性能最好不存在深度分页问题能够反映数据的实时变更 | 实现复杂,需要有一个全局唯一的字段连续分页的实现相对复杂,因为每一次查询都需要上次查询的结果跳页查询问题 | 海量数据的分页 |
Ubuntu下打包Qt程序到无Qt环境机器中运行
一、TextField设置高度后,文字无法居中解决方案:TextField( style: TextStyle( ), decoration: InputDecoration( prefixIcon: ImageUtils.getImage("search")/*Icon(Icons.search)*/, hintText: widget.hint, fillColor: Color(0x.
环境 pyhton3.6pip 升级到10.0以上,,不然可能出现装不上的可能。博主为了解码 AES 用了1天的时间,安了各种包,然而走了很多坑,在这里给大家提供一个简便的方法首先在命令行(推荐) pip installCrypto你会发现安装下来的包名 是小写的。(crypto)包的路径在你python/lib/site_packages下必须先改成大写 (Crypto)然而导入 ...
项目结构:UserAction.java:/** * Action 的开发模式1:继承 ActionSupport 类; * 如果使用 struts 的数据校验功能,必须继承 ActionSupport; */public class UserAction extends ActionSupport { /** * Action 中业务处理方法 ...
2019独角兽企业重金招聘Python工程师标准>>> ...
题目描述问题描述:已知一个正整数序列,个数未知,但至少有一个元素,你的任务是建立一个单链表,并使用该链表存储这个正整数序列,然后统计这个序列中元素的最大值与最小值,计算序列全部元素之和。正整数的输入用-1作为结束标志,注意-1不算这个正整数序列中的元素(不要统计-1)。输入与输出要求:输入一个正整数序列,正整数序列元素的个数未知,但以输入“-1”结束,输入“-1”前至少输入一个正整数。序列中...
转自http://www.cnblogs.com/bicoffee/p/3838049.html之前一直用SAS做ARIMA模型预测,今天尝试用了一下R,发现灵活度更高,结果输出也更直观。现在记录一下如何用R分析ARIMA模型。 1. 处理数据1.1. 导入forecast包forecast包是一个封装的ARIMA统计软件包,在默认情况下,R没有预装fore
递归前言如何在限定总和的条件下求加和?迭代法递归法前言在前几篇文章中我不断引用更改了国际象棋发明人被国王赏麦子的故事,这篇文章我还需要再借一下这两个人。舍罕王和宰相达依尔来到了现代,这次舍罕王聪明了,他对宰相说,“这次我不用麦子赏你了,我直接给你发钱。另外,我也不用棋盘了,我直接给你一大笔固定数额的钱。”宰相思考了一下,回答道:“没问题,陛下,就按照您的意愿。不过,我有一个小小的要求。能...
奇点( Singularity)表示独特的时间以及种种奇异的影响。数学家用这个词表示一个超越了任何限制的值,如除以一个越来越趋近于零的数,其结果将激增。如y=1/x,随着x的值趋近于零,其对应的函数(Y)的值将激增。 这样的数学函数实际上从未到过无限的值,因为除以零是数学上的“未定义”(无法计算的)。但是,因为除数x趋近于零,y的值超过任何的限制(趋于无穷大)。 在天体物理学中,如果一个大质量恒
背景:项目中,用datagrid的可编辑行实现对业务信息的录入其中包括日期字段的录入在以往的开发中常常见到的是这种(easyUI日期输入框):<input class="easyui-datebox"id="xxx" name="xxx" required="true"/>既非可编辑行的日期控件和这种(datagrid日期输入框):&lt...
Run a Jackson related project and hits the following JsonMerge not found error.Consolejava.lang.NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonMergeat com.fasterxml.jackson.databind.intros...
【问题】一个python脚本,本来都运行好好的,然后写了几行代码,而且也都确保每行都对齐了,但是运行的时候,却出现语法错误:IndentationError: unindent does not match any outer indentation level 【解决过程】1.对于此...