Elasticsearch(ES)搜索结果排序、分页和高亮

发布于 2024-07-17
1029

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

扫码阅读
手机扫码阅读
Elasticsearch排序、分页和高亮摘要

Elasticsearch排序、分页和高亮摘要

今日目标

本文介绍了如何使用Elasticsearch的DSL语法进行文档的排序、分页和高亮操作。

1. 排序

Elasticsearch默认按照相关度(_score)排序,但支持自定义字段排序。可用于排序的字段类型包括:keyword类型、数值类型、地理坐标类型和日期类型。

1.1 普通字段排序

排序条件以数组形式表示,可以定义多个条件,按照声明顺序依次排序。例如,通过用户评价(score)降序和价格(price)升序排序酒店数据。

1.2 地理坐标排序

地理坐标排序基于文档字段的geo_point类型,计算到目标点的距离并根据距离进行排序。例如,按距离升序排列离当前位置最近的酒店数据。

2. 分页

默认返回前10条数据,通过修改from和size参数可实现分页查询。from指定起始位置,size指定返回的文档数量。

2.1 深度分页问题

深度分页可能对内存和CPU产生较大压力,Elasticsearch默认禁止超过10000条的请求。针对深度分页问题,推荐使用search after方案,支持无上限逐页查询,但不支持随机翻页。

3. 高亮

高亮显示用于标记搜索关键字,通常通过添加HTML标签实现。高亮字段必须与查询字段一致,或设置required_field_match=false以允许非查询字段高亮。

3.1 高亮示例

例如,对酒店品牌字段“如家”进行高亮显示,通过设置pre_tags和post_tags定义样式。

总结

分页查询的实现方案包括:

  • from + size:支持随机翻页,但深度分页有性能问题。
  • search after:无查询上限,但仅支持逐页查询。
  • scroll:适用于海量数据的迁移,但消耗内存且结果非实时。

查询DSL包含以下属性:

  • query:查询条件
  • from和size:分页条件
  • sort:排序条件
  • highlight:高亮条件

通过DSL语法,可以灵活实现排序、分页和高亮功能。

springboot葵花宝典

主要分享JAVA技术,主要包含SpringBoot、SpingCloud、Docker、中间件等技术,以及Github开源项目

272 篇文章
浏览 225K

还在用多套工具管项目?

一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。

加入社区微信群
与行业大咖零距离交流学习
PMO实践白皮书
白皮书上线