elasticsearch的にdoc_values

    ドク値とは何ですか

実際には、ほとんどのNoSQL複数のインデックスを作成するための時間もこのように使用され、その後、それはそれは可能、検索を強化すること、テキストを格納する別の方法です。Docvalues両者の関係を入れ替えることによって、この問題を解決するには。用語の転置インデックスは、それらを含む文書にマッピングされDocvalues、彼らが含まれているという点で、条件に文書をマップするために:

ドク規約------------------------------------------------ ----------------- Doc_1 | ブラウン、犬、キツネは、迅速、以上、怠惰な跳び
Doc_2を| ブラウン、犬、キツネ、以上、怠惰、跳躍、で、迅速、夏
Doc_3 | 犬、犬、キツネ、上、跳び、迅速、------------------------------------- ----------------------------

データは、各文書の行を収集するために、転置された場合、すべての語彙項目を取得する非常に簡単です。だから、検索を収集し、集計する転置インデックス、集約演算を使用して文書を検索するためにDocValues、データを、これがありますElasticSearch

    深い理解ElasticSearchドク値

DocValuesこれは、転置インデックスインデックスと同時に生成されます。それはあるDocValues倒排索引ベースとしてSegement生成と不変です。同時に、DocValuesおよび倒排索引ディスクに同じシリアル化され、そのためには、パフォーマンスとスケーラビリティに多くのことができます。

DocValuesシリアライズされたデータ構造がディスクに永続化することにより、我々は、オペレーティングシステムのメモリをフルに活用、代わりにできるJVMHeapとき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:trueindex:no ,我们得到一个只能被用于聚合/排序/脚本的字段。

おすすめ

転載: blog.51cto.com/12182612/2430287