mysql 分页 去重_『备忘录』elasticsearch 去重分页查询

本文探讨了在Elasticsearch中如何进行分页查询和去重操作。初期设计复杂导致查询困难,通过调整索引结构,查询语句简化。利用`collapse`功能实现了去重,结合`size`和`from`实现分页,同时提到了`scroll`作为另一种翻页方式。参考链接提供了更多关于Elasticsearch分页的深入理解。
摘要由CSDN通过智能技术生成

一开始数据结构设计的很复杂,又是父子关系又是嵌套关系,结果发现不能通过简单的查询得到想要的结果:比如一个商店只出现一件符合条件的商品,弄得查询语句就变成这样了

curl -XPOST http://localhost:9200/bnb_shop_room/_search -H 'Content-Type:application/json' -d'

{

"query":{

"bool":{

"must":[

{"match":{"shop_name":"民宿"}},

{"has_child":{

"type":"roomBase",

"query": {

"bool":{

"must":[

{"has_child":

{

"type":"roomPrice",

"query":{

"bool":{

"must":[

{

"nested":{

"path":"room_prices",

"query": {

"bool":{

"must":[

{

"range":{

"room_prices.date":{

"gt":"2018-03-24",

"lt":"2019-09-26"

}

}

},

{

"term":{

"room_prices.status":1

}

},

{

"range":{

"room_prices.price":{

"gt":0

}

}

}

]

}

}

}

}

]

}

}

}

}

]

}

}

}

}

]

}

},

"size":5,

"from":0,

"sort": [

{

"_geo_distance": {

"shop_location" : {

"lat" : "22.5971370000",

"lon" : "114.5201730000"

},

"order": "asc",

"unit": "m"

}

}

],

"aggs": {

"shop": {

"terms": {

"field" : "shop_id"

},

"aggs": {

"room": {

"children": {

"type": "roomBase"

},

"aggs": {

"price": {

"children": {

"type": "roomPrice"

},

"aggs": {

"nestedPrice": {

"nested": {

"path": "room_prices"

},

"aggs": {

"statsPrice": {

"stats": {

"field": "room_prices.price"

}

}

}

}

}

}

}

}

}

}

}

}'

最后改了索引信息的结构,不做关联关系,全部平铺,冗余数据,发现查询语句简单多了,查询语句变成如下:

curl -XPOST http://localhost:9200/shop_room_day/_doc/_search -H 'Content-Type:application/json' -d'

{

"query":{

"bool":{

"must":[

{"match":{"shop_name":"主题 深圳"}},

{

"range":{

"day_date":{

"gt":"2018-03-27",

"lt":"2018-03-29"

}

}

},

{

"term":{

"day_status":1

}

},

{

"range":{

"day_price":{

"gt":0

}

}

}

]

}

},

"sort": [

{"day_price":{"order":"asc"}},

{

"_geo_distance": {

"shop_location" : {

"lat" : "22.5971370000",

"lon" : "114.5201730000"

},

"order": "asc",

"unit": "m"

}

}

],

"collapse": {

"field": "shop_id"

},

"size":2,

"from":0

}'

用 『collapse』功能能从搜索结果中去重,翻页靠『size』和『from』组合,当然也可以用『scroll』的方式实现翻页效果

折叠『collapse』功能推荐这篇案例文章:「Elasticsearch 5.x 字段折叠的使用」 https://elasticsearch.cn/article/132

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

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

SpringBoot 整合 Elasticsearch深度分页查询

es 查询共有4种查询类型 QUERY_AND_FETCH: 主节点将查询请求分发到所有的分片中,各个分片按照自己的查询规则即词频文档频率进行打分排序,然后将结果返回给主节点,主节点对所有数据进行汇总 ...

ElasticSearch——分页查询

前言 ElasticSearch实现分页查询,有3种方式,他们在数据查询中各自占据着不同的优势,因此在搜索引擎的数据分页过程中,如何更好地利用各自的优势来进行数据查询是一个非常重要的过程. 传统分页( ...

分页查询信息(使用jdbc连接mysql数据库实现分页查询任务)

分页查询信息       使用jdbc连接mysql数据库实现分页查询任务 通过mysql数据库提供的分页机制,实现商品信息的分页查询功能,将查询到的信息显示到jsp页面上. 本项目 ...

【分页问题】elasticsearch 深分页问题以及解决方法

本文主要参考: 1.https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html ...

Elasticsearch——分页查询From&Size VS scroll

Elasticsearch中数据都存储在分片中,当执行搜索时每个分片独立搜索后,数据再经过整合返回.那么,如果要实现分页查询该怎么办呢? 更多内容参考Elasticsearch资料汇总 按照一般的查询 ...

Oracle 分页查询与数据去重

1.rownum字段 Oracle下select语句每个结果集中都有一个伪字段(伪列)rownum存在.rownum用来标识每条记录的行号,行号从1开始,每次递增1.rownum是虚拟的顺序值,前提是 ...

ElasticSearch—分页查询

ElasticSearch查询—分页查询详解 Elasticsearch中数据都存储在分片中,当执行搜索时每个分片独立搜索后,数据再经过整合返回.那么,如何实现分页查询呢? 按照一般的查询流程来说,如 ...

Elasticsearch教程(九) elasticsearch 查询数据 | 分页查询

Elasticsearch  的查询很灵活,并且有Filter,有分组功能,还有ScriptFilter等等,所以很强大.下面上代码: 一个简单的查询,返回一个List ..    ...

随机推荐

学习zepto.js(对象方法)[3]

继续说zepto里attributes的相关操作. attr,removeAttr,prop这三个方法. attr(): 三种用途 get: 返回值为一个string字符串 $("

10个jQuery小技巧

收集的10个 jQuery 小技巧/代码片段,可以帮你快速开发. 1.返回顶部按钮 你可以利用 animate 和 scrollTop 来实现返回顶部的动画,而不需要使用其他插件. $('a.top' ...

linux下locate为什么有时候某些文件

这与locate命令的工作原理有关.他是通过查询数据库的方式查找文件的.并且数据库每天更新一次.你要找的文件可能没有更新到数据库中. 可以有两种选择: 第一,过一天后再查看一下,应该就会找到了. 第二 ...

About javascript closure

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures?redirectlocale=en-US&redi ...

SQL Server AlwaysOn 和 ILB

Narayan Annamalai 网络高级项目经理 自 2013 年 8 月起,Azure 基础结构服务开始支持 SQL ServerAlwaysOn 可用性组.Azure 服务的内部负载平衡 (I ...

JavaScript_变量的自动转换和语句

JS自动类型转换 var a = 1; var b = true; "==" 表示 可以自动类型转换,比较的是数值 "===" 表示可以自动类型转换,先比较数值 ...

基于centos7+nginx+uwsgi+python3+django2.0部署Django项目

0.序言 本文讲解如何基于centos7+nginx+uwsgi+python3+django2.0把windows上的本地项目部署到云服务器上. 本文服务器上的django项目和虚拟环境的路径将建立 ...

FTP判断ftp上是否有文件目录,没有就创建的具体案例

/// /// 判断ftp上是否有指定的文件目录,没有创建 /// ///

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值