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/zh-hk/n/333996.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
NGZRE的頭像NGZRE
上一篇 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

發表回復

登錄後才能評論