Elasticsearch(ES)搜索结果排序、分页和高亮
1029
版权声明
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
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葵花宝典
还在用多套工具管项目?
一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。
白皮书上线