5、建議3:避免稀疏性
背后的數(shù)據(jù)結構,也是依賴的索引和存儲數(shù)據(jù),最適合密集數(shù)據(jù)。舉例:當所有文件都有相同的字段時,對于啟用了norms(默認情況下是text文本字段的情況)或啟用了doc vlaue(默認情況下是數(shù)字,日期,IP和關鍵字的情況),尤其如此。
原因是在內(nèi)部識別帶有所謂docID的文檔,這些docId是介于0和索引中的文檔總數(shù)之間的整數(shù)。這些doc ids用于的內(nèi)部API之間的通信:例如文本倒排文檔舉例,對某個單元有的單元上搜索會生成一連串的doc ids,然后這些doc ids用于檢索norm的值以便計算對于這些文檔進行評分。
當前實現(xiàn)此norm查找的方式是為每個文檔保留一個字節(jié)。然后,可以通過讀取索引處的字節(jié)來檢索給定doc id的標準值。雖然這非常有效并且有助于快速訪問每個文檔的標準值,但這樣做的缺點是沒有值的文檔也需要一個字節(jié)的存儲空間。
請注意,即使稀疏性最顯著的影響是存儲要求,它也會對索引速度和搜索速度產(chǎn)生影響,因為沒有字段的文檔的這些字節(jié)仍需要在索引時寫入并在搜索時花費時間。
在索引中包含少數(shù)稀疏字段是完全沒問題的。 但要注意,如果稀疏性成為規(guī)則而不是異常,那么索引將不會像它那樣有效。
本節(jié)主要關注norms 和doc ,因為這些是受稀疏性影響最大的兩個特征。 稀疏性也影響倒排索引(用于索引text/字段)和維度點(用于索引和類型)的效率,但程度較小。
以下是一些有助于避免稀疏性的建議:
5.1避免將不相關的數(shù)據(jù)放在同一個索引
您應該避免將具有完全不同結構的文檔放入同一索引中以避免稀疏性。 將這些文檔放入不同的索引通常會更好,您還可以考慮為這些較小的索引提供較少的分片,因為它們總體上包含的文檔較少。
請注意,此建議不適用于您需要在文檔之間使用父/子關系的情況,因為此功能僅在位于同一索引中的文檔上受支持。
5.2規(guī)范化文檔結構
即使你真的需要在同一個索引中放入不同類型的文檔,也許有機會減少稀疏性。 例如,如果索引中的所有文檔都有一個時間戳字段,但有些文檔稱之為,而其他文檔稱之為,則有助于重命名它文本倒排文檔舉例,以便所有文檔對同一數(shù)據(jù)具有相同的字段名稱。
5.3避免使用多types
類型可能聽起來像是在單個索引中存儲多種類型數(shù)據(jù)(意譯)的好方法。 其實它們不是!假設types將所有內(nèi)容存儲在單個索引中,基于上述稀疏性的討論,在單個索引中具有不同字段的多個類型會有問題。
如果您的type沒有非常相似的,您可能需要考慮將它們移動到專用索引。
5.4在稀疏字段上禁用norms和
如果上述建議均不適用于您的情況,您可能需要檢查在稀疏字段中是否確實需要norms和。 如果在字段上不需要生成計算分數(shù),則可以禁用norms,對于僅用于過濾的字段通常也是如此。 可以在既不用于排序也不用于聚合的字段上禁用。 請注意,不應輕易做出這個決定,因為這些參數(shù)不能在實時索引上更改,因此如果您意識到需要norms或,則必須重新索引。
【銘毅天下注解】
1)6.X以后就不存在一個索引多個type了,一個索引下只有唯一的type了。所以:5.X版本之前的多type要變成多索引。
2)創(chuàng)建索引的時候,的設計非常重要,各個字段的細分設計一方面決定了存儲,另一方面:不同字段類型的設計會對性能產(chǎn)生非常重要的影響。
官網(wǎng)地址:
6、小結
性能問題排查非一朝一夕之功,唯賴于:對核心細節(jié)問題點滴的深耕和死磕!