ドク値とは何ですか
実際には、ほとんどのNoSQL
複数のインデックスを作成するための時間もこのように使用され、その後、それはそれは可能、検索を強化すること、テキストを格納する別の方法です。Docvalues
両者の関係を入れ替えることによって、この問題を解決するには。用語の転置インデックスは、それらを含む文書にマッピングされDocvalues
、彼らが含まれているという点で、条件に文書をマップするために:
ドク規約------------------------------------------------ ----------------- Doc_1 | ブラウン、犬、キツネは、迅速、以上、怠惰な跳び Doc_2を| ブラウン、犬、キツネ、以上、怠惰、跳躍、で、迅速、夏 Doc_3 | 犬、犬、キツネ、上、跳び、迅速、------------------------------------- ----------------------------
データは、各文書の行を収集するために、転置された場合、すべての語彙項目を取得する非常に簡単です。だから、検索を収集し、集計する転置インデックス、集約演算を使用して文書を検索するためにDocValues
、データを、これがありますElasticSearch
。
深い理解ElasticSearchドク値
DocValues
これは、転置インデックスインデックスと同時に生成されます。それはあるDocValues
と倒排索引
ベースとしてSegement
生成と不変です。同時に、DocValues
および倒排索引
ディスクに同じシリアル化され、そのためには、パフォーマンスとスケーラビリティに多くのことができます。
DocValues
シリアライズされたデータ構造がディスクに永続化することにより、我々は、オペレーティングシステムのメモリをフルに活用、代わりにできるJVM
のHeap
。ときworkingset
、それは自動的にシステムの利用可能なメモリよりもはるかに少ないであろうDocValues
非常に高速な読み取りと書き込みのように、メモリに格納されている;しかし、利用可能なメモリよりもはるかに大きい、オペレーティングシステムが自動的にされるときにDocValues
ディスクに書き込まれます。明らかに、このパフォーマンスは、メモリ内のよりもはるかに悪いことはないだろうが、その大きさは、もはや、サーバのメモリに制限されています。使用している場合はJVM
あるHeap
という理由だけで、それを達成するためにOutOfMemory
プログラムがクラッシュします。
ドク値圧縮
大まかに言えば、DocValues
ストレージカラムの本質的に配列、この構造は、重合のために非常に適しているソーティング、および他の作業スクリプト。さらに、本実施形態は、特定のデジタル式で、圧縮格納することは非常に容易です。これは、ディスク容量を低減し、アクセス速度を向上させます。タイプの数字のセットを見てみましょうDocValues
:
ドク規約------------------------------------------------ ----------------- Doc_1 | 100 Doc_2 | 1000年 Doc_3 | 1500 Doc_4 | 1200 Doc_5 | 300 Doc_6 | 1900 Doc_7 | 4200 ------------------------------------------------- ----------------
あなたは、それぞれの番号が100の倍数である、ここで気づくでしょうDocValues
、さらにデータ圧縮のための便利な、セクションの内側にすべての値を検出し、公約数を使用します。我々は、すべての各番号の100で割って、[取得できます[1,10,15,12,3,19,42]
。これらの図は、ほんの数ビットを記憶することができるで、今小さいだけでなく、ディスクストレージのサイズを減少させます。
DocValues
圧縮時に、次のヒントを参考にしてください。これは、圧縮モードの検出が続きます。
すべての値は、異なる(または削除)である場合、フラグが設定され、これらの値を記録しています
値は、単純なエンコーディングテーブルを使用して、256未満の場合
値は、の存在を検出するの最大公約数256よりも大きい場合
最大公約数は、オフセットを計算するために最小値から出発して、均一なエンコーディングを存在しない場合
もちろん、ストレージならString
タイプ、同じシーケンステーブルができるによってString
デジタル型をコードし、次にデジタルタイプを構築しますDocValues
。
ドク値を無効にします
DocValues
に加えて、すべてのフィールドにデフォルトで有効になってanalyzed strings
。つまり、すべてのデジタル、地理座標、日付、IPであると解析しません(not_analyzed
)文字の種類はデフォルトで有効になります。
analyzed strings
しかし、それを使用することはできませんDocValues
その後の分析の後に大量のテキストを生成しますので、Token
ので、非常にパフォーマンスに影響を与えます。
けれどもDocValues
非常に使いやすいが、あなたは本当にこのデータ保持特性を必要としない場合、彼を無効にするだけでなく、ディスクスペースを節約するように、それはインデックスの速度を向上させる可能性が優れています。
無効にするにはDocValues
、フィールドマッピング(マッピング)に設定をdoc_values:false
することができます。たとえば、ここに私たちは新しいインデックスを作成し、フィールドが"session_id"
無効になっていますDocValues
:
PUT my_index{ "mappings": { "my_type": { "properties": { "session_id": { "type": "string", "index": "not_analyzed", "doc_values": false } } } }}
通过设置 doc_values:false
,这个字段将不能被用于聚合、排序以及脚本操作
同样可以禁用倒排索引,使它不能被正常搜索,但是可以排序,例如:
PUT my_index{ "mappings": { "my_type": { "properties": { "customer_token": { "type": "string", "index": "not_analyzed", "doc_values": true, "index": "no" } } } }}
通过设置 doc_values:true
和 index:no
,我们得到一个只能被用于聚合/排序/脚本的字段。