一、使用查詢條件縮小搜索範圍
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