ES查询优化

一、使用查询条件缩小搜索范围

ES对搜索引擎的高效性得益于它采用的倒排索引数据结构。但是,在处理大规模的数据时,查询速度会变慢,因为查询会扫描整个索引。因此,使用查询条件缩小搜索范围可以在查询期间提高性能。

例如,如果您的应用程序只需要最近一天的数据,可以在查询时添加“日期”字段。通过这种方式,仅检查最近一天的数据,就可以缩小数据集的范围,加快查询速度。


GET /_search
{
    "query": {
        "bool": {
            "must": [
                {"match": {"title": "search"}},
                {"range": {"date": {"gte": "now-1d/d", "lt": "now/d"}}}
            ]
        }
    }
}

二、使用查询语句中的filter替代query

在查询语句中,“query”语句默认会根据查询条件积极评分筛选,即对命中的文档进行排序,使得相关性得分高的文档排在前面。

然而,当查询结果并不需要返回相关性得分时,应使用“filter”语句来替代“query”语句。这可以避免文档排序操作,从而加快搜索速度。filter语句只对命中的文档进行筛选,并返回结果,而不进行评分。


GET /_search
{
    "query": {
        "bool": {
            "filter": [
                {"match": {"title": "search"}},
                {"range": {"date": {"gte": "now-1d/d", "lt": "now/d"}}}
            ]
        }
    }
}

三、使用scroll API处理大量数据

当您从ES中检索大量数据时,由于需要在内存中缓存检索都返回的结果,搜索性能可能会受到影响。为了解决这个问题,ES提供了scroll API。

scroll API使用游标而不是从主节点中获取结果。当您一次性检索大量数据时,scroll API会用小批量数据替代所有数据,使得更快的访问,并减少内存的占用。


POST /logs/_search?scroll=1m
{
    "search_type": "query_then_fetch",
    "size": 1000,
    "query": {
        "match": {
            "response_code": 404
        }
    }
}

四、使用聚合操作检索数据

使用聚合操作可以检索ES中的数据,这些数据可能比普通查询数据更有用。聚合操作可用于生成类别统计、清单、相关性数据和数学摘要等。

聚合操作最常被用于数据分析、商业智能和数据挖掘领域。最常见的、最简单的聚合操作是计算平均值、最大值、最小值和总和。


GET /logs/_search
{
    "size": 0,
    "aggs": {
        "popular_items": {
            "terms": {
                "field": "url.keyword"
            },
            "aggs": {
                "num_requests": {
                    "sum": {
                        "field": "response_size"
                    }
                }
            }
        }
    }
}

五、使用短语匹配替代全文搜索

文本字段经常需要执行全文搜索,在这种情况下,使用更高效、更加特化的短语匹配查询能够提升搜索性能。使用短语匹配查询可以更好地控制哪些搜索字符串将被返回,从而提高搜索速度。

例如,在处理恶意软件、安全事件等大型日志数据时,使用短语匹配查询可确保返回与安全相关的结果,而不是所有包含匹配单词的结果。


GET /logs/_search
{
    "query": {
        "match_phrase": {
            "message": "kernel panic"
        }
    }
}

原创文章,作者:NGZRE,如若转载,请注明出处:https://www.506064.com/n/333996.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
NGZRENGZRE
上一篇 2025-02-05 13:05
下一篇 2025-02-05 13:05

相关推荐

  • Spark集成ES开发

    本文将介绍如何使用Spark集成ES进行数据开发和分析。 一、系统概述 Spark是一个基于内存的分布式计算系统,可以快速地处理大量数据。而ES(ElasticSearch)则是一…

    编程 2025-04-28
  • Helm部署ES CrashLoopBackOff

    如果你在使用Helm部署ES时遇到CrashLoopBackOff问题,那么本文将对这一问题进行详细解答。我们将从以下方面进行阐述: 一、问题分析与定位 在使用Helm部署ES时,…

    编程 2025-04-27
  • 深入理解ES updateByQuery

    近年来,ElasticSearch已成为许多公司进行数据处理、存储和查询的首选。updateByQuery就是其中一个非常重要的API之一。updateByQuery,作为ES提供…

    编程 2025-04-25
  • ES 聚合查询详解

    一、聚合查询基础概念 ES 聚合查询是一种统计、分组和过滤数据的方式,通过对文档中的字段进行聚合操作,实现对数据的统计分析。在 ES 中,聚合查询主要有以下几个概念: 聚合:对文档…

    编程 2025-04-23
  • ES详解

    一、变量 在ES中,使用var / let / const定义变量。其中,var是定义变量的一种方式,它有着很多缺陷。let语句声明一个块级作用域的本地变量,var语句声明一个函数…

    编程 2025-04-23
  • ES修改字段类型详解

    一、需求概述 ES修改字段类型是指在已有的索引中,通过特定的操作方式将某个字段的类型修改为其它类型。当ES在建立索引的时候,已经确定好了每个字段的类型,而如果在建立后发现类型不符需…

    编程 2025-04-13
  • 查看ES集群状态

    ES(Elasticsearch)是一个基于Lucene搜索引擎的分布式开源搜索和分析引擎。ES集群状态是指集群的健康状况、节点状态、分片状态等。在运维过程中,了解ES集群状态是必…

    编程 2025-04-12
  • ES中添加字段的方法

    在使用ES过程中,添加字段是一项常见的操作。本文将就ES添加字段,从以下几个方面详细阐述: 一、通过PUT命令添加字段 PUT命令是ES中的索引API,可以用来创建、修改索引,也可…

    编程 2025-04-12
  • OpenSL ES在多媒体应用开发中的应用

    一、OpenSL ES介绍 OpenSL ES是指Open Sound System for Embedded Systems,是一种开放式、跨平台的、低延迟的音频编程接口,主要用…

    编程 2025-02-25
  • 探究ES中的must和should

    一、must查询 使用must查询可以筛选出同时符合多个条件的文档,相当于逻辑上的“与”操作。下面是一个例子: POST /_search { “query”: { “bool”:…

    编程 2025-02-24

发表回复

登录后才能评论