我在我的elasticsearch服務器(本地主機:9200)中創建了一個索引,它獲取應用程式的日志檔案。這些資料超過 25GB(JSON 資料),我花了將近 3 個小時將它從 Logstash 發送到 Elasticsearch。
根據http://localhost:9200/_cat/indices?v請求,我可以看到我的索引有超過 2200 萬個檔案。
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open test i4nRcsZ8SJyjuKXpH2lI_A 1 1 22240500 0 11.5gb 11.5gb
當我搜索特定欄位及其值時,ES需要花費大量時間從我的索引中搜索并獲取結果。我知道我的輸出將有超過 10,000 個檔案,這就是我使用該SCAN函式而不是SEARCHpython 的原因。
我選擇 ES 的唯一原因是它需要很少的時間來提供輸出,但在我的情況下,它需要幾分鐘,并且在大多數測驗中我從 ES 收到超時錯誤。
query = {
"_source" : ['full_log'],
"query" : {
"match" : {
"location" : "192.168.0.1"
}
}
}
rel = scan(client=es,
query=query,
scroll='1m',
index='test',
raise_on_error=True,
preserve_order=False,
clear_scroll=True)
如何縮短搜索結果時間?
NETFLIX 的搜索引擎也是這樣檢索資料的嗎?
uj5u.com熱心網友回復:
對您的問題的回答有 2 個“級別”。
第一層,字面意思。為了使您的查詢更快,請確保您使用的是關鍵字欄位型別 for location,還可以嘗試使用term代替match。另外,請查看Tune for search speed檔案。
二級雖然敦促著眼于大局。如果您無論如何都要將數百萬個檔案加載到記憶體中,也許從原始 JSON 加載它們并將它們保存在記憶體中會更快?或者在需要時從 JSON 加載?或者為每個創建幾個 JSON 存盤桶location并在需要時快速讀取一個?
或者也許您真的不需要一次加載所有檔案并且可以批量處理結果?將所有資料加載到記憶體中不會擴展,如果資料量增長,您可能會耗盡記憶體。
Elasticsearch 非常適合全文搜索、語言處理和聚合,但如果您將其用作簡單的存盤,開銷會很大。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/383820.html
