首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏ES搜索

    ES三周年】ES查询—海量数据搜索深度分页优化

    图片 背景 最近在实际项目中查询条件上越来越复杂,mysql的筛选已无法支撑,准备将所有搜索筛选改为es查询。 例如ES 共有 4 个shard,并且每个shard没有副本。假如分页的大小为 10,想取第11 页的内容。则对应的 from = 100,size = 10。 缺点 查询分页受限于max_result_window设置,不能无限制翻页。 查询分页性能不稳定,越往后翻页越慢,存在深度翻页问题。 图片 图片 图片 具体使用方法: 第一次查询时,会生成一个 scrollId ,并将所有符合搜索条件的搜索结果缓存起来。 图片 在 7.10以后 版本中,ES官方 不再推荐使用Scroll方法来进行深分页,而是推荐使用带PIT的 search_after 来进行查询。 图片 PIT可以被看为存储索引数据状态的轻量级视图。

    5.1K229编辑于 2023-04-29
  • 来自专栏SmartSi

    ElasticSearch 分页搜索

    分页 之前的文章ElasticSearch 空搜索与多索引多类型搜索我们知道,我们的空搜索匹配到集群中的13个文档。 但是,命中数组中只有10个文档(文章只显示了2条数据,故意省略掉)。 请记住,搜索请求通常跨越多个分片。每个分片都会生成自己的排序结果,然后在协调节点集中排序,以确保整体顺序正确。 2. 深度分页 为了理解深度分页为什么是有问题的,我们假设在一个有5个主分片的索引中搜索。 好消息是,网页搜索引擎一般不会为任何查询返回超过1,000个结果。 Elasticsearch版本:2.x 原文:https://www.elastic.co/guide/en/elasticsearch/guide/2.x/pagination.html

    1.6K30发布于 2019-08-07
  • 来自专栏微信公众号:Java团长

    SSM框架——实现分页搜索分页

    分页是Java Web项目常用的功能,昨天在Spring MVC中实现了简单的分页操作和搜索分页,在此记录一下。使用的框架为(MyBatis+SpringMVC+Spring)。 -- 分页功能 start -->

    共 ${page.totalPageCount} 页 第 ${page.pageNow} 页 <a href="myProductPage? -- <em>分页</em>功能 End --> <em>2</em>.查询<em>分页</em> 关于查询<em>分页</em>,大致过程完全一样,只是第三个参数(上面是loginUserId)需要接受用户输入的参数,这样的话我们需要在控制器中接受用户输入的这个参数(页面中的 <input>使用GET方式传参),然后将其加入到SESSION中,即可完成查询<em>分页</em>(此处由于“下一页”这中超链接的原因,使用了不同的JSP页面处理<em>分页</em>和<em>搜索</em><em>分页</em>,暂时没找到在一个JSP页面中完成的方法

    2.2K40发布于 2018-08-03
  • 来自专栏prepared

    es_分组-分页-TransportClient实现

    总结: 1、group 之后不能自动分页,需要手动设置; 2、size 需要指定,否则会出错。 ---- group 之后分页、排序实现 需要手动截取分页对应范围内的数据。 carids.getBuckets(); List<carBean> listCarTgs = new ArrayList<>(); carBean carBean ; // buckets 全部数据,分页就是取固定位置的 carBean.setPassTimes((int)bucket.getDocCount()); carBean.setBayId(bucket.getKeyAsString().split("_")[2] buckets.get(i).getDocCount()); carBean.setBayId(buckets.get(i).getKeyAsString().split("_")[2] elasticsearchProperties.getTgsType(), (currentPage-1) * limit, 0); Aggregations aggregations = response.getAggregations(); 例子2

    1.4K51发布于 2019-10-08
  • 来自专栏YG小书屋

    ES 深度分页scroll使用方式

    我们知道ES对于from+size的个数是有限制的,二者之和不能超过1w。当所请求的数据总量大于1w时,可用scroll来代替from+size。 ==" } ' 如果你对scroll取出的数据顺序没有要求的话,则可以对“_doc”进行排序,es对这种排序做了优化。 1m&pretty' -H 'Content-Type: application/json' -d' { "slice": { "id": 0, "max": 2 1m&pretty' -H 'Content-Type: application/json' -d' { "slice": { "id": 1, "max": 2 scroll查询时,scan类型scroll_id会变,普通查询scroll_id不会变 http://zcty5v5.xyz/2016/10/17/ES-scroll-issues/ 同样的命令,curl

    4.6K20发布于 2018-05-23
  • 来自专栏犀牛饲养员的技术笔记

    ES分页看这篇就够了

    )同样也有很多分页查询的场景,比如在数据量比较大的情况下,并且查询条件比较复杂,在mysql中无法命中索引,我们往往会选择使用ES分页查询。 分页的几种方案 1. from/size方案 这是ES分页最常用的一种方案,跟mysql类似,from指定查询的起始位置,size表示从起始位置开始的文档数量。看个例子。 ES内部是通过index.max_result_window这个参数控制分页深度的,我们可以针对特定的索引来修改这个值。 所以分页越深,ES处理的开销就大,占用内存就越大。 ? 2. search after方案 有时候我们会遇到一些业务场景,需要进行很深度的分页,但是可以不指定页数翻页,只要可以实时请求下一页就行。 search after基于ES内部排序好的游标,可以实时高效的进行分页查询,但是它只能做下一页这样的查询场景,不能随机的指定页数查询。

    26.3K71发布于 2020-08-10
  • 来自专栏让技术和时代并行

    如何跳过es分页这个坑?

    1、分页查询 1.1、 正常分页查询代码如下 假设现在你要查询第100页的10条数据,但是对于es来说,from=1000000,size=100,这时 es需要从各个分片上查询出来10000100条数据 es分页查询过程中,刚开始翻页可能速度比较快,可能到第一百页查询就需要4-5s,翻到1000页以后,直接报错了。 这个size大小的意思不是总分页的大小,实际数量应该是:所以实际返回的数量是:分片的数量*size 滚动时间设置是指在这个查询搜索结果的缓存时间,时间不能太久,毕竟内存空间是有限的。 ##7、 总结: es分页查询不支持深度分页,如果偏要使用要结合具体业务场景进行使用。不能当成关系型数据库中的分页进行使用。 要想提高产品体验和查询效率不能过于依赖技术,要结合需求进行分析以提高体验,因为很多搜索类产品都不支持深度分页

    5.7K50发布于 2019-07-02
  • 来自专栏洁癖是一只狗

    ES搜索相似度

    今天再来一道面试真题,es搜索的相似度算法如何计算 首先,我们要从这几方面回答 TF(term frequency)检索词频率 IDF(inversed document frequency)反向文档频率 doc2: hello java, you are very good, oh hello world!!! 中出现的次数,比如上面出现了3次,一个term在所有doc 中出现的次数越多,分数就越低,比如我们的and 或the常用词,就会频繁出现,对分数的贡献就很少,所以分数就比较小 字段长度准则 hello搜索的 文档向量 比如hello world ,有3doc,其中一个doc1包含一个hello,另外一个doc2包含word,doc3包含hello world,比如下面 doc1----->[2,0] doc2 比如hello world,es会根据hello world在所有doc中的评分情况,计算一个查询向量,比如hello基于所有doc都有一个评分为2,world基于所有doc都有一个评分5,查询向量就是

    1.5K10编辑于 2022-06-24
  • 来自专栏第二蒙古上单

    ES搜索内容置顶

    有些时候,我们可能需要人工干预ES搜索结果,让指定的内容置顶,ES提供了pinned语法来实现该功能。 match_phrase" : { "title" : { "query" : "制作云", "boost" : 2, "minimum_should_match" : 1 } } } }, "size" : 10, "from" : 0 } 看文档说似乎是从ES

    2.5K30发布于 2021-05-18
  • 来自专栏第三方工具

    es分页,pageNum从0开始和es排序代码demo

    es分页,pageNum从0开始和es排序代码demo 如果从1开始,每页150条记录,可能查询不到结果。排查下来是初始的第一页的参数错误。 参数从0开始计算,es搜素,需要注意起始页。 //es分页,pageNum从0开始。 searchSourceBuilder.from((reqVO.getPageNum()) * reqVO.getPageSize()).size(reqVO.getPageSize()); } //es

    22410编辑于 2024-11-21
  • 来自专栏服务端技术杂谈

    ES的深度分页解决方案

    es search_after也不适合做深度分页分页多了,内存不够,将查询失败。 我们在分页的时候如果用from+size的话,from + size 默认不能超过1万条数据。 对于深度分页,到底有没有比较理想的解决方案,既能拉取比较多的数据,拉取的数据也都是有序的?那么你可以了解下search_after。 返回的response如下: 代码块 { "_index": "log.xxx.20181120_2", "_type": "logs", 返回了每条数据的es_timestamp和_uid。 第二次分页 代码块 GET twitter/tweet/_search { "size": 10, "query": { "match" : {

    2.6K30发布于 2020-06-19
  • 来自专栏全栈程序员必看

    02.全文搜索ES

    全文搜索 1.介绍 elasticsearch 6 (和elasticsearch 5 的区别在于,root用户权限、一个库只能建立一个表) elasticsearch 6一个索引只能建立一张表 1.1 文本搜索引擎: 优点:搜索快; 缺点:占用空间。 solr需要依赖zk1. 1.2 elasticSearch(搜索引擎)的算法 倒排索引(在内容上建立索引,用内容匹配索引); btree mysql数据库的索引方式。 /elasticsearch 直接启动会报相关的错误 2.2.2 修改相关配置 权限问题: 需要改成其他非root用户才能启动:(1)创建用户: adduser es (2)切换用户: su es 去修改: 建议配置2g~4g,学习测试环境配置256m 就可以了 elasticSearch.yml中配置es的host地址(配成本机地址,允许访问) elasticSearch.yml 集群配置文件

    1.1K20编辑于 2022-06-30
  • 来自专栏JAVA同学会

    ES学习笔记(九)搜索

    搜索ES最最核心的内容,没有之一。前面章节的内容,索引、动态映射、分词器等都是铺垫,最重要的就是最后点击搜索这一下。下面我们就看看点击搜索这一下的背后,都做了哪些事情。 分数(score) ES搜索结果是按照相关分数的高低进行排序的,咦?! 怎么没说搜索先说搜索结果的排序了?咱们这里先把这个概念提出来,因为在搜索的过程中,会计算这个分数。 在ES搜索当中,分为两种,一种计算分数,而另外一种是不计算分数的。 频繁使用的过滤还会被ES加入到缓存,以提升ES的性能。下面我们看一个查询和过滤的例子,这个也是ES官网中的例子。 最后 在ES中,检索的花样是比较多的,这里也不能一一给大家介绍了,只介绍一些最基本、最常用的查询功能。下一篇我们看一下ES的聚合查询功能。

    85130发布于 2020-05-25
  • 来自专栏JAVA同学会

    ES学习笔记(九)搜索

    搜索ES最最核心的内容,没有之一。前面章节的内容,索引、动态映射、分词器等都是铺垫,最重要的就是最后点击搜索这一下。下面我们就看看点击搜索这一下的背后,都做了哪些事情。 分数(score) ES搜索结果是按照相关分数的高低进行排序的,咦?! 怎么没说搜索先说搜索结果的排序了?咱们这里先把这个概念提出来,因为在搜索的过程中,会计算这个分数。 在ES搜索当中,分为两种,一种计算分数,而另外一种是不计算分数的。 频繁使用的过滤还会被ES加入到缓存,以提升ES的性能。下面我们看一个查询和过滤的例子,这个也是ES官网中的例子。 最后 在ES中,检索的花样是比较多的,这里也不能一一给大家介绍了,只介绍一些最基本、最常用的查询功能。下一篇我们看一下ES的聚合查询功能。

    66930发布于 2020-05-21
  • 来自专栏程序员泥瓦匠

    搜索 ES 数据写入原理

    写个小文巩固下,本文主要讲 ES -> Lucene 的底层结构,然后详细描述新数据写入 ES 和 Lucene 的流程和原理。 Elasticsearch 不仅仅是 Lucene 和全文搜索,我们还能这样去描述它: 分布式的实时文件存储,每个字段都被索引并可被搜索 分布式的实时分析搜索引擎 可以扩展到上百台服务器,处理 PB 级结构化或非结构化数据 ES 基于底层这些包,然后进行了扩展,提供了更多的更丰富的查询语句,并且通过 RESTful API 可以更方便地与底层交互。类似 ES 还有 Solr 也是基于 Lucene 实现的。 三、新文档写入流程 3.1 数据模型 如图 一个 ES Index (索引,比如商品搜索索引、订单搜索索引)集群下,有多个 Node (节点)组成。每个节点就是 ES 的实例。 每个节点上会有多个 shard (分片), P1 P2 是主分片 R1 R2 是副本分片 每个分片上对应着就是一个 Lucene Index(底层索引文件) Lucene Index 是一个统称。

    82230编辑于 2021-12-17
  • PHP 数据分页搜索功能实现

    数据分页搜索功能是 Web 应用中最常见的功能之一。无论是显示用户列表还是产品目录,分页搜索功能都有助于提升用户体验和性能。 生成分页导航:显示分页按钮,方便用户跳转。2. PRIMARY KEY, name VARCHAR(255) NOT NULL, price DECIMAL(10, 2) NOT NULL);PHP 实现分页<? 搜索功能的实现搜索功能可以结合分页进行实现。以下是关键步骤:获取搜索关键字:从用户输入中获取搜索条件。动态生成查询:将搜索条件添加到 SQL 查询中。结合分页:同时处理分页搜索参数。 动态查询:根据搜索关键字生成 SQL 查询。搜索分页结合:通过 http_build_query 保留搜索条件和分页参数。4.

    2.1K00编辑于 2025-01-26
  • 来自专栏蝉沐风的码场

    Google搜索为什么不能无限分页

    当我用Google搜索MySQL这个关键词的时候,Google只提供了13页的搜索结果,我通过修改url的分页参数试图搜索第14页数据,结果出现了以下的错误提示:百度搜索同样不提供无限分页,对于MySQL 其次,无限分页的功能对于搜索引擎而言是非常消耗性能的。你可能感觉很奇怪,翻到第2页和翻到第1000页不都是搜索嘛,能有什么区别? 我自然不知道Google的搜索具体是怎么做的,因此接下来我用ES(Elasticsearch)为例来解释一下为什么深度分页搜索引擎来说是一个头疼的问题。 为什么拿ES举例子Elasticsearch(下文简称ES)实现的功能和Google以及百度搜索提供的功能是相同的,而且在实现高可用和高伸缩性的方法上也大同小异,深度分页的问题都是由这些大同小异的优化方法导致的 这样一来,集群的横向扩容就非常简单了,现在我们向集群中再添加2个节点,则ES会自动将分片均衡到各个节点之上:高可用 + 弹性扩容副本和分片功能通力协作造就了ES如今高可用和支持PB级数据量的两大优势。

    2.1K30编辑于 2022-06-09
  • 来自专栏OSChina

    ES - 使用ES客户端来操作搜索引新

    编写方法 package com.shi.es; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress org.elasticsearch.transport.client.PreBuiltTransportClient; import com.fasterxml.jackson.databind.ObjectMapper; /** * ES /关闭客户端 client.close(); } /** * 添加文档 方式二 * @throws IOException */ public void setAddDOC2( .get(); System.out.println("文档添加成功..."); //关闭客户端 client.close(); } } package com.shi.es QueryBuilders.queryStringQuery("无人驾驶校车").defaultField("content"); search(client,builder);//执行查询 } } 3 测试 package com.shi.es

    1.7K10发布于 2019-08-26
  • 来自专栏pythonista的日常

    es搜索优化&mysql查询优化

    这周优化了我们沙抖官网搜索的功能,这个搜索目前是根据视频标题进行匹配,之前是对用户输入的关键词进行了分词查找,比如用户输入【机器人】,这样的话,只要视频标题中有关键词的任意一个字都会被搜到,比如含有【人 】字的标题会展示出来,并可能排的很靠前,所以我就对当前的搜索进行了优化,现在搜索是优先进行相邻短语查询 match_phrase,如果相邻短语查询结果小于2个就进行普通的分词查询,这个相邻短语查询是要求在请求字符串中的所有查询项必须都在文档中存在 添加索引语句如下: 1.普通索引 ALTER TABLE `aweme_data` ADD INDEX category_id_index ( `category_id` ); 2.添加联合索引 ALTER

    2.1K20发布于 2020-06-16
  • 来自专栏小小程序员——DATA

    ES三周年】分布式搜索索引elasticsearch JavaAPI编写ES搜索

    不过,elasticsearch内部分页时,必须先查询 0~1000条,然后截取其中的990 ~ 1000的这10条:图片查询TOP1000,如果es是单点模式,这并无太大影响。 针对深度分页ES提供了两种解决方案,官方文档:search after:分页时需要排序,原理是从上一次的排序值开始,查询下一页数据。官方推荐使用的方式。 2.2.3.小结分页查询的常见实现方案以及优缺点:from + size:优点:支持随机翻页缺点:深度分页问题,默认查询上限(from + size)是10000场景:百度、京东、谷歌、淘宝这样的随机翻页搜索ES7.1开始不推荐,建议用 after search方案。2.3.高亮2.3.1.高亮原理什么是高亮显示呢? = client.search(request, RequestOptions.DEFAULT); // 4.解析响应 handleResponse(response);}3.5.排序、分页搜索结果的排序和分页是与

    2.4K51编辑于 2023-04-28
领券