elasticsearch引數優化

2021-10-06 14:35:23 字數 1871 閱讀 7682

}elasticsearch.yml中的配置:indices.memory.index_buffer_size:

30%

應該至少為系統cache預留一半的可用物理記憶體,更大的記憶體有更高的cache命中率。

使用更快的硬體。

為了讓搜尋時的成本更低,文件應該合理建模。特別是應該避免join操作,巢狀(nested)會使查詢慢幾倍,父子(parent-child)關係可能使查詢慢數百倍,因此,如果可以通過非規範化(denormalizing)文件來回答相同的問題,則可以顯著地提高搜尋速度。

還可以針對某些查詢的模式來優化資料的索引方式。例如,如果所有文件都有乙個 price欄位,並且大多數查詢在乙個固定的範圍上執行range聚合,那麼可以通過將範圍「pre-indexing」到索引中並使用terms聚合來加快聚合速度。

有些欄位的內容是數值,但並不意味著其總是應該被對映為數值型別,例如,一些識別符號,將它們對映為keyword可能會比integer或long更好。

在使用日期範圍檢索時,使用now的查詢通常不能快取,因為匹配到的範圍一直在變化。但是,從使用者體驗的角度來看,切換到乙個完整的日期通常是可以接受的,這樣可以更好地利用查詢快取。

為不再更新的唯讀索引執行force merge,將lucene索引合併為單個分段,可以提公升查詢速度。

全域性序號是一種資料結構,用於在keyword欄位上執行terms聚合。它用乙個數值來代表欄位中的字串值,然後為每一數值分配乙個 bucket。這需要乙個對 global ordinals 和 bucket的構建過程。預設情況下,它們被延遲構建,因為es不知道哪些欄位將用於 terms聚合,哪些字段不會。可以通過配置對映在重新整理(refresh)時告訴es預先載入全域性序數:

terms聚合有兩種不同的機制:

· 通過直接使用欄位值來聚合每個桶的資料(map)。· 通過使用欄位的全域性序號並為每個全域性序號分配乙個bucket(global_ordinals)。es 使用 global_ordinals 作為 keyword 欄位的預設選項,它使用全域性序號動態地分配bucket,因此記憶體使用與聚合結果中的字段數量是線性關係。在大部分情況下,這種方式的速度很快。

如果es主機重啟,則檔案系統快取將為空,此時搜尋會比較慢。可以使用index.store.preload設定,通過指定副檔名,顯式地告訴作業系統應該將哪些檔案載入到記憶體中,

例如,配置到elasticsearch.yml檔案中:index.store.preload: ["nvd", "***"]

在組合查詢中可以通過bool過濾器進行and、or和not的多個邏輯組合檢索,這種組合查詢中的表示式在下面的情況下可以做等價轉換:

(a|b) & (c|d) ==> (a&c) | (a&d) | (b&c) | (b&d )

預設情況下,es會拒絕超過1000個分片的搜尋請求。我們應該更好地組織資料,讓搜尋請求的分片數更少。如果想調節這個值,則可以通過action.search.shard_count配置項進行修改。

· _source:原始的json文件資料。

· _all:索引所有其他字段值的一種通用字段,這個欄位中包含了所有其他欄位的值。

索引引數

· index:控制字段值是否被索引。它可以設定為true或false,預設為true。

· doc values:預設情況下,大多數欄位都被索引,這使得它們可以搜尋。倒排索引根據term找到文件列表,然後獲取文件原始內容。

· store:預設情況下,欄位值會被索引使它們能搜尋,但它們不會被儲存(stored)。意味著可以通過這個字段查詢,但不能取回它的原始值。

優化措施

elasticsearch引數配置

前一段時間配置了公司offline,online的es服務兩組,根據節點分工不同,分為master,client,data三種型別節點 伺服器引數修改如下 etc sysctl.conf 增加 vm.max map count 262144 然後執行sysctl p生效 etc security l...

elasticsearch引數詳解

elasticsearch.yml cluster.name elasticsearch 配置es的集群名稱,預設是elasticsearch,es會自動發現在同一網段下的es,如果在同一網段下有多個集群,就可以用這個屬性來區分不同的集群。node.name franz kafka 節點名,預設隨機...

ElasticSearch 引數調優

系統層面的調優主要是記憶體的設定與避免交換記憶體。es 安裝後預設設定的堆記憶體是1gb,這很明顯是不夠的,那麼接下來就會有乙個問題出現 我們要設定多少記憶體給 es 呢?其實這是要看我們集群節點的記憶體大小,還取決於我們是否在伺服器節點上還是否要部署其他服務。那我們在建立索引的時候,應該建立多少個...