Elasticsearch:result

排序

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

GET /indexName/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "FIELD": {
        "order": "desc" // 排序字段和排序方式,ASC、DESC
      }
    }
  ]
}

分页

es默认情况下只返回top10的数据,而如果要查询更多数据就需要修改分页参数了。
es通过修改from,size参数来控制要返回的分页结果:

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

es使用倒排索引,不利于分页,查询 990 ~ 1000的数据实际上是查询 0 ~ 1000 的数据,然后截取最后10条。单点查询没有问题。当搭建集群后数据处理变得复杂。
Elasticsearch:result_第1张图片
ES设定结果集查询的上限是10000
针对深度分页,ES提供了两种解决方案

  • search after:分页时需要排序,原理是从上一次的排序值开始,查询下一页数据。官方推荐使用的方式
  • scroll:原理将排序数据形成快照,保存在内存,官方已经不推荐使用
    Elasticsearch:result_第2张图片

高亮

在搜索结果中把搜索关键字突出显示
做法是:服务端提前给搜索字段加上标签

GET /indexName/_search
{
  "query": {
    "FIELD": "text"
  },
  "highlight": { // 指定要高亮的字段
    "fields": {
      "FIELD":{
        "pre_tags": "",  //开始标签
        "post_tags": "" //结束标签
      }
    }
  }
}
# 高亮查询,默认情况下,ES搜索字段必须与高亮字段一致
GET /indexName/_search
{
  "query": {
    "match": {
      "all": "如家"
    },
    "highlight":{
      "fields": {
        "name":{
          "require_field_match": "false"
        }
      }
    }
  }
}

Reference
黑马程序员

你可能感兴趣的:(#,ELK,elasticsearch,大数据)