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"]
}
相关推荐
IT研究室1 小时前
最新大数据毕业设计选题推荐-基于大数据的北京市招标公告数据分析与可视化-大数据-Spark-Hadoop-Bigdata
大数据·数据分析·课程设计
why-geo1 小时前
从“会聊天”到“能办事”:Meta Muse与国内个人AI智能体的竞速赛
大数据·人工智能
howdoyoudo2026061 小时前
当新案例冲击旧框架:分类系统的宿命与修正路径
大数据·网络·数据库·人工智能·安全·ai·分类
一隅论数智1 小时前
RDF(Resource Description Framework)介绍和使用举例(二)
大数据·人工智能·经验分享·笔记·学习·架构·政务
Elasticsearch2 小时前
最快的工作是你根本不需要做的工作:Elasticsearch 中速度提升 100 倍的排序查询
elasticsearch
计算机毕业编程指导师2 小时前
【Python毕设选题推荐】基于Spark的国内主要农作物产量趋势分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·python·数据分析·spark·毕业设计·课程设计·农作物产量
计算机毕业编程指导师2 小时前
【Python毕设选题推荐】基于Spark的宫颈癌变光谱特征数据分析可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·spark·毕业设计·宫颈癌变
IT研究室2 小时前
最新大数据毕业设计选题推荐-基于大数据的城市生活气象指数分析与可视化-大数据-Spark-Hadoop-Bigdata
大数据·生活·课程设计
长三角智造观察4 小时前
中小制造ERP+MES选型避坑:对接集成VS原生一体化,深度对比TCO与落地痛点
大数据·人工智能·制造
Elastic 中国社区官方博客11 小时前
将你自己的密钥用于现有 Elastic Cloud 部署
大数据·数据库·elasticsearch·全文检索