es分页与高亮处理

1.es分页处理:

分页:

es默认情况下只返回top10的数据,而如果要查询更多数据,就需要修改分页参数了。


案例1:

GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "from": 5, //分页开始的位置
  "size": 20, //期望获取的文档总数
  "sort": [
    {
      "price": {
        "order": "asc"
      }
    }
  ]
}

深度分页问题:

es是分布式的,所以会面临深度分页问题。例如按price排序后,获取from=990,size=10的数据

  • 1.首先在每个数据分片上都排序并查询前1000条文档。
  • 2.然后将所有节点的结果聚合,在内存中重新排序选出前1000条文档
  • 3.最后从这1000条中选取从990开始的10条文档

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


深度分页解决方案:

针对深度分页,es提供了两种解决方案
1.search after:分页时需要排序,原理是从上一次的排序值开始,查询下一页数据。这是官方推荐的使用方式
2.scroll:原理是将排序数据形成快照,保存在内存。官方已经不推荐使用。

2.es高亮处理

高亮就是在搜索结果中把搜索关键字突出显示。
原理是这样的:将搜索结果中的关键字用标签标记出来,在页面中给标签添加css样式

案例1

GET /hotel/_search
{
  "query": {
    "match": {
      "all": "如家"
    }
  },
  "highlight": {
    "fields": {
      "name": {
        "require_field_match": "false", //关键字和搜索内容可以不一致
        "pre_tags": "<em>",
        "post_tags": "</em>"
      }
    }
  }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值