首页 > 其他分享 >SpringCloud(七.5)ES(elasticsearch)-- 查询结果处理

SpringCloud(七.5)ES(elasticsearch)-- 查询结果处理

时间:2024-04-19 11:24:03浏览次数:25  
标签:search 高亮 -- SpringCloud elasticsearch match 排序 ES 1000

搜索结果处理

  • 排序
  • 分页
  • 高亮显示

 

1、排序

ES支持对搜索结果排序,默认是根据相关度算分(BM25算法的_score)来排序。可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。

注意:指定了排序字段后ES就会放弃打分,按指定的排序字段走。

语法如下: 按某个字段排序  /   地理坐标排序(指定经纬度中心点按距离排序)

 

 

#排序
GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "score": {
        "order": "desc"
      },
      "price": {
        "order": "asc"
      }
    }
  ]
}

效果如下:

 

高德开放平台获取鼠标点击位置经纬度:https://lbs.amap.com/demo/javascript-api-v2/example/map/click-to-get-lnglat/

举例:我们搜索一下距离 上海迪士尼度假区(121.666389,31.142992) 附近的酒店

#121.666389,31.142992附近的酒店升序排序     lon是经度  lat是纬度
GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "_geo_distance": {
        "location": {
          "lat": 31.142992,
          "lon": 121.666389
        },
        "order": "asc",
        "unit": "km"
      }
    }
  ]
}

效果展示:

 

 2、分页

 

注意:以上图举例,ES的排序原理是:按价格升序获取前1000条数据,然后截取990到1000条文档。

 

深度分页问题(ES做了集群处理)

如果以后数据量很大了,ES也会做集群处理,这时再按价格升序获取990-1000条的数据的话原理如下:

1、需要从每个集群里取前1000条

2、将结果聚合,在内存中重新排序选出前1000条文档

3、最后从这1000条中,选取从990开始的10条文档。

如果搜索页数过深,或者结果集(from+size)越大 ,对内存和CPU的消耗也越高。因此ES设定结果集查询的上限是10000。 

 

 

 

如查想查10000条之后的文档 可以使用 search after 查询

原理: 

比如说按价格升序

查第一次1-10条,然后查接下来10条的时候,它会记住你的第10条的价格,以此为基准向后查。

缺点:只能向后查,不能向前查。

 

 

 

 

 

3、高亮显示 

 

注意事项

1、指定要高亮的字段,默认加的标签就是 <em>,所以编写DSL时可以简写,如下:

#高亮
GET /hotel/_search
{
  "query": {
    "match": {
      "name": "如家"
    }
  },
  "highlight": {
    "fields": {
      "name": {
      }
    }
  }
}

如果前端定义的标签叫其它名字,这时就需要进行指定标签

#高亮
GET /hotel/_search
{
  "query": {
    "match": {
      "name": "如家"
    }
  },
  "highlight": {
    "fields": {
      "name": {
        "pre_tags": "<em>",
        "post_tags": "</em>"
      }
    }
  }
}

 

2、搜索的字段和指定高亮的字段默认必须一致,否则不生效。

 如果搜索字段为 all (copy_to的三个字段),下面指定高亮处字段内可以加一个 "require_field_match": "false" (不必与搜索字段匹配)

 

3、高亮查询ES的原始文档是不可修改的,所以高亮结果在 highlight 中返回。见上图。

 

标签:search,高亮,--,SpringCloud,elasticsearch,match,排序,ES,1000
From: https://www.cnblogs.com/JoeYD/p/18145292

相关文章

  • vscode自定义log快捷生成代码
    1、进入设置页面:文件>首选项>用户代码片段>选择设置的语言。2、自定义打印:3、关于代码段显示位置的调整设置文件>首选项>设置,搜索代码段或snippetSuggestions,修改为”top”;4、页面中使用:输入log看效果 ......
  • 递归获取某个节点的儿子节点
    java代码:publicList<Department>getAllChildrenDepartmentsFlat(LongparentId){List<Department>allDepartments=departmentRepository.findAll();//假设使用JPA的Repository来进行数据库操作List<Department>allChildren=newArrayLi......
  • EAS_固定资产二开字段
    1.针对固定资产模块二开,首先要对固定资产卡片业务操作对应的后台数据有个认识,卡片主要有三种卡片,固定资产卡片(当前卡片)、备份卡片、业务卡片,三者关系是这样的:1)当前卡片记录的是固定资产当前的状态信息,2)业务卡片记录的固定资产在做了业务之后的状态,比如变更,清理,拆分,组合、调拨......
  • 使用bat切换java版本环境变量
    使用bat切换java版本环境变量需求有多个项目,每个项目依赖的java版本不同,需要切换java版本。或者想试用java新版本新特性,需要切换java版本。针对以上情况,Windows情况虽然修改一下环境变量JAVA_HOME即可,但也相对繁琐,一开始在找有没有类似nvm这种工具,但是找的过程看到一篇文章......
  • 【机器学习】三种基本损失函数
    参考:“损失函数”是如何设计出来的?直观理解“最小二乘法”和“极大似然估计法”_哔哩哔哩_bilibili“交叉熵”如何做损失函数?打包理解“信息量”、“比特”、“熵”、“KL散度”、“交叉熵”_哔哩哔哩_bilibili《信息论基础》三种基本损失函数任务:衡量人脑与神经网络在......
  • 《Pyramid Codes: Flexible Schemes to Trade Space for Access Efficiency in Reliab
    问题1:Introduction部分,第五段,[16,12]ERC和3-Copy达到了相同的可靠性,在每一个块独立失败概率为0.01的情况下,这个是怎么证明的。问题2:同上,第五段后半部分,那么多的IO次数是怎么计算出来的。在系统中,要分清各种性能指标,读和写是不一样的,第六段提到的是写性能,主要方法就是先用复制的方......
  • 洛谷 p3372 线段树
    更改了线段树实现的方式,将lazy值作为单独的节点存在,降低存储压力structNode{longlongsum;Node():sum(0ll){}Nodeoperator+(constNode&other){Noderes=*this;res.sum+=other.sum;returnres;};voidapplyLazy(......
  • 洛谷题单指南-动态规划1-P1049 [NOIP2001 普及组] 装箱问题
    原题链接:https://www.luogu.com.cn/problem/P1049题意解读:装尽可能多的物品,使得总体积越大越好,即剩余空间最小,还是一个01背包问题,物品的体积就是其价值。解题思路:01背包模版题,物品体积、价值相同,直接采用一维dp。100分代码:#include<bits/stdc++.h>usingnamespacestd;co......
  • 【学习笔记】 字符串基础 : 后缀自动机(基础篇)
    本文只介绍关于\(\mathbf{SAM}\)的基本概念与实现后缀自动机是什么类似\(\text{AC}\)自动机,后缀自动机(\(\text{SAM}\))是能且只能接收字符串所有后缀的自动机我们首先要知道,\(\mathbf{SAM}\)是只能接收所有后缀的结构而不是只能维护后缀的结构事实上\(\mathbf{SAM}\)......
  • “RPC 好,还是 RESTful 好?” 不要选错了!
    RPC主要是基于TCP/IP协议的,而HTTP服务主要是基于HTTP协议的,我们都知道HTTP协议是在传输层协议TCP之上的,所以效率来看的话,RPC当然是要更胜一筹啦!下面来具体说一说RPC服务和HTTP服务。OSI网络七层模型在说RPC和HTTP的区别之前,我觉的有必要了解一下OSI的七层网络结构模型(虽然实际应......