『备忘录』elasticsearch 去重分页查询
一开始数据结构设计的很复杂,又是父子关系又是嵌套关系,结果发现不能通过简单的查询得到想要的结果:比如一个商店只出现一件符合条件的商品,弄得查询语句就变成这样了
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
分页『scroll』功能推荐这篇案例文章:「elasticsearch 深分页问题以及解决方法」https://blog.csdn.net/wild46cat/article/details/64123353
『备忘录』elasticsearch 去重分页查询的更多相关文章
- 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 ...
- es的查询、排序查询、分页查询、布尔查询、查询结果过滤、高亮查询、聚合函数、python操作es
今日内容概要 es的查询 Elasticsearch之排序查询 Elasticsearch之分页查询 Elasticsearch之布尔查询 Elasticsearch之查询结果过滤 Elasticse ...
- Elasticsearch——分页查询From&Size VS scroll
Elasticsearch中数据都存储在分片中,当执行搜索时每个分片独立搜索后,数据再经过整合返回.那么,如果要实现分页查询该怎么办呢? 更多内容参考Elasticsearch资料汇总 按照一般的查询 ...
- Oracle 分页查询与数据去重
1.rownum字段 Oracle下select语句每个结果集中都有一个伪字段(伪列)rownum存在.rownum用来标识每条记录的行号,行号从1开始,每次递增1.rownum是虚拟的顺序值,前提是 ...
- ElasticSearch—分页查询
ElasticSearch查询—分页查询详解 Elasticsearch中数据都存储在分片中,当执行搜索时每个分片独立搜索后,数据再经过整合返回.那么,如何实现分页查询呢? 按照一般的查询流程来说,如 ...
随机推荐
- day29 主机管理-堡垒机2-原生ssh会话记录
day29课堂代码:https://github.com/liyongsan/git_class/tree/master/day29 课堂笔记: 通过原生Ssh 记录会话1. 在我们自己的堡垒机交互脚 ...
- ansible入门六(roles)
一.什么场景下会用roles? 假如我们现在有3个被管理主机,第一个要配置成httpd,第二个要配置成php服务器,第三个要配置成MySQL服务器.我们如何来定义playbook? 第一个play用到 ...
- C++复习7.虚表的概念
C++ 类的虚表 20130929 关键技术:封装.继承.组合.虚函数.抽象基类.动态绑定.多态性等等 1.首先整理一下在阿里巴巴面试遇到的函数虚表的问题. 在C++中的Class中的函数式存储在Cl ...
- 二十、dbms_stats(用于搜集,查看,修改数据库对象的优化统计信息)
1.概述 作用:用于搜集,查看,修改数据库对象的优化统计信息. 2.包的组成 1).get_column_stats作用:用于取得列的统计信息语法:dbms_stats.get_column_stat ...
- HDU 5831 Rikka with Parenthesis II (贪心)
Rikka with Parenthesis II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- 【javascript基础】 原生JSON.parse解析异常问题
[问题背景]用jQ,ajax返回json,返回的字符串如:{name:"suntiger035"},status:200,readyState:4,代码无任何问题,结果,succe ...
- UITextField 限制用户输入小数点后位数的方法
UITextField 限制用户输入小数点后位数的方法 位数限制: limited 在UITextField的代理方法中添加类似如下代码 - (BOOL)textField:(UITextField ...
- android mvp RxJava 框架结构分析
一个MVP结构:M是model,V是Fragment,P是提供者,P持有V和Model,控制获取数据并给V赋值.(结合了RXJava Retrofit和okHttp)
- jmeter测试MySQL数据库
前提:安装好MySQL数据库,并且下载了jmeter安装包 1.打开jmeter 2.下载mysql-connector-java.jar,将jar包默认复制到jmeter的bin目录下面,因为默认打 ...
- L170 Autism Linked to Zinc Deficiency in Childhood
While the exact cause of autism is unknown, its development in children has been linked to various g ...