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"]
}
相关推荐
珠海西格电力7 小时前
零碳园区的能源供给成本主要包括哪些方面?
大数据·分布式·微服务·架构·能源
经济元宇宙7 小时前
摄影培训行业百科:机构选择与学习路径全解析
大数据·人工智能·学习
GJGCY8 小时前
企业AI Agent落地架构深度解析:LLM+RAG+RPA+工具调用全流程
大数据·人工智能·ai·数字化·智能体
互联网科技看点8 小时前
数智化人事管理软件系统行业分析与推荐
大数据
2601_957780849 小时前
GPT API工程化接入:从演示验证到生产部署的完整实践
大数据·人工智能·gpt·架构
WL_Aurora9 小时前
YARN资源调度器深度解析 | 架构原理、作业提交流程
大数据·hadoop·yarn
团象科技10 小时前
2026出海技术观察:云API接口迭代的能力边界与业务增量空间
大数据·人工智能
元拓数智10 小时前
AI 自动化工作流,正在重塑企业数据工程的效率边界
大数据·人工智能·ai·自动化·工作流·数据工程
xwz小王子10 小时前
机器人学习十年进化史——从强化学习到VLA的范式变迁
大数据·学习·机器人
老詹图解IT11 小时前
银河麒麟V10(Kylin V10 SP1/SP3)常见报错对照表—2026年5月版
大数据·kylin