二十六、搜索结果处理(排序、分页、高亮)

目录

一、排序

二、分页

1、深度分页问题

2、三种方案的优缺点

(1)from+size

优点:

缺点:

场景:

(2)after search

优点:

缺点:

场景:

(3)scroll

优点:

缺点:

场景:

三、高亮

1、原理:

2、总体处理


一、排序

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

二十六、搜索结果处理(排序、分页、高亮)_第1张图片

GET /indexName/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "FIELD": "desc"  // 排序字段和排序方式ASC、DESC
    }
  ]
}
GET /indexName/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "_geo_distance" : {
          "FIELD" : "纬度,经度",
          "order" : "asc",
          "unit" : "km"
      }
    }
  ]
}

二、分页

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

GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "from": 990, // 分页开始的位置,默认为0
  "size": 10, // 期望获取的文档总数
  "sort": [
    {"price": "asc"}
  ]
}

1、深度分页问题

二十六、搜索结果处理(排序、分页、高亮)_第2张图片

2、三种方案的优缺点

(1)from+size
优点:

支持随机翻页

缺点:

深度分页问题,默认查询上限(from + size)是10000

场景:

百度、京东、谷歌、淘宝这样的随机翻页搜索

(2)after search
优点:

没有查询上限(单次查询的size不超过10000)

缺点:

只能向后逐页查询,不支持随机翻页

场景:

没有随机翻页需求的搜索,例如手机向下滚动翻页

(3)scroll
优点:

没有查询上限(单次查询的size不超过10000)

缺点:

会有额外内存消耗,并且搜索结果是非实时的

场景:

海量数据的获取和迁移。从ES7.1开始不推荐,建议用after search方案

三、高亮

1、原理:

将搜索结果中的关键字用标签标记出来
在页面中给标签添加 css 样式
GET /hotel/_search
{
  "query": {
    "match": {
      "FIELD": "TEXT"
    }
  },
  "highlight": {
    "fields": { // 指定要高亮的字段
      "FIELD": {
        "pre_tags": "",  // 用来标记高亮字段的前置标签
        "post_tags": "" // 用来标记高亮字段的后置标签
      }
    }
  }
}

二十六、搜索结果处理(排序、分页、高亮)_第3张图片

在搜索值与高亮值不同时,可以加如上配置使其生效。

2、总体处理

GET /hotel/_search
{
  "query": {
    "match": {
      "name": "如家"
    }
  },
  "from": 0, // 分页开始的位置
  "size": 20, // 期望获取的文档总数
  "sort": [ 
    {  "price": "asc" }, // 普通排序
    {
      "_geo_distance" : { // 距离排序
          "location" : "31.040699,121.618075", 
          "order" : "asc",
          "unit" : "km"
      }
    }
  ],
  "highlight": {
    "fields": { // 高亮字段
      "name": {
        "pre_tags": "",  // 用来标记高亮字段的前置标签
        "post_tags": "" // 用来标记高亮字段的后置标签
      }
    }
  }
}

你可能感兴趣的:(微服务学习,java,前端,服务器)