09.Elasticsearch应用(九)

Elasticsearch应用(九)

1.搜索结果处理包括什么

  • 排序
  • 分页
  • 高亮
  • 返回指定字段

2.排序

介绍

Elasticsearch支持对搜索结果排序,默认是根据相关度算分来排序

支持排序的字段

  1. keyword
  2. 数值
  3. 地理坐标
  4. 日期类型

排序语法

复制代码
GET /[索引名称]/_search
{
    "query":{"match_all":{}},
    "sort":[
        {
            "字段名称":"desc"
        }
    ]
}

GET /[索引名称]/_search
{
    "query":{"match_all":{}},
    "sort":[
        {
            "_geo_distance":{
                "字段名称":"维度,经度",
                "order":"asc",
                "unit":"km"
            }
        }
    ]
}

注意

  1. 排序分为:asc,desc
  2. 地理坐标字段排序和其他字段的排序语法不一样
  3. 可以根据多个字段排序
  4. 做了排序就没有相关性算分了

3.分页

介绍

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

排序语法

复制代码
GET /[索引名称]/_search
{
    "query":{"match_all":{}},
    "from":990, // 分页开始的位置,默认为0
    "size":10, // 获取多少条
    "sort":[
        {"price":"asc"}
    ]
}

默认分页限制

from + size的结果必须小于或等于10000,否则会出现异常,虽然可以通过配置解除这个i限制,但是不建议这么做,建议采用其他方式解决

ES与分页

ES底层是倒排索引,它的结构是不利于做分页的,ES采用的实际上是一种逻辑上的分页,如果获取990-1000的数据,那么ES会排序获取前1000条数据,然后截取990-1000,在集群环境下会出现深度分页问题

深度分页

深度分页问题
解决方案
  1. search after: 分页时需要排序,原理是从上一次的排序值开始,查询下一页数据。官方推荐使用的方式。问题是只能向后查,不能向前查
  2. scroll: 原理是将排序数据形成快照,保存在内存。官方已经不推荐使用

scroll语法

复制代码
# 1m,说明采用游标查询,保持游标查询窗口一分钟
GET /[index]/_search?scroll=1m
{
    "query":{"match_all":{}},
    "size":20
}

GET /_search/scroll
{
    "scroll":"1m",
    "scroll_id":"返回的id"
}

分页总结

4.高亮

介绍

就是在搜索结果中把搜索关键字突出显示

原理

  1. 将搜索结果中的关键字用标签标记出来
  2. 在页面中给标签添加CSS样式

排序语法

复制代码
GET /[索引名称]/_search
{
    "query":{
        "match":{
            "字段名称":"值"
        }
    },
    "highlight":{
        "fields":{ // 指定要高亮的字段
            "字段名称":{
                "fragment_size":100, // 返回高亮数据的最大长度
                "number_of_fragments":5, // 返回结果最多可以包含几段不连续的文字
                "pre_tags":"<em>" // 用来标记高亮字段的前置标签
                "post_tags":"</em>" // 用来标记高亮字段的后置标签
                "require_field_match":"false" // 高亮字段是否需要跟搜索字段匹配
            }
        }
    }
}

注意

  1. 要使用高亮,那么查询一定不能使用类似于match_all的查询,需要使用带关键字的查询,因为高亮是给关键字高亮的
  2. 默认情况下,ES搜索字段必须与高亮字段一致

5.返回指定字段

复制代码
GET /[index]/_search
{
    "query":{"match_all":{}},
    "_source":["字段名1","字段名2"]
}
相关推荐
whcyhhh1 小时前
头歌实践教学平台:大数据存储2023(六)
大数据·数据库·python
世岩清上1 小时前
新能源宣传片怎么拍?如何用画面讲好你的绿色能源故事
大数据·人工智能·能源·宣传片·宣传片拍摄
Elastic 中国社区官方博客2 小时前
让大模型思考,让小模型执行:在 Elastic Workflows 中拆分 LLM 成本
大数据·运维·数据库·人工智能·elasticsearch·ai
Faith_xzc2 小时前
一条 SQL 顶一条 Flink 链路?Doris Streaming Job 持续导入全景解析
大数据·数据库·sql·flink
SXkehuirongsheng3 小时前
APP开发定制和模板开发哪个更实用?
大数据·运维·人工智能
IZero073 小时前
Elasticsearch 学习笔记筑基-文档操作篇
笔记·学习·elasticsearch
醉颜凉3 小时前
Elasticsearch 核心基石:倒排索引全解析(原理+结构+流程图+实战)
elasticsearch·jenkins·流程图
醉颜凉4 小时前
Elasticsearch底层原理:文档更新与删除完整执行流程深度剖析
大数据·elasticsearch·jenkins
大大大大晴天4 小时前
大数据平台为什么必须走向云原生:从资源孤岛到弹性数据基础设施
大数据·云原生
小白说大模型5 小时前
AI驱动的个性化学习路径:知识图谱与知识点关联的存储与推理
大数据·人工智能·学习·mysql·机器学习·prompt·知识图谱