2016-11-02 11 views
0

私は弾性検索で簡単な質問があります。私はHTMLファイルを持っているので、他のフィールドと一緒にインデックスに格納したいだけです。私は2つの異なる指標として以下作成した弾性検索インデックスのサイズ

オプション1:バイナリフィールドを有し、BASE64 にHTMLに変換

(myindex1は、HTMLフィールドがcompresedされたインデックス名及びBASE64値)
HTML = (zlib.compress(Html.encode('utf-8'),9)).encode('base64') 

上記のコードを使用して、myindex1にロードする前にbase64に圧縮してエンコードしています。

"Html": { 
     "type": "binary", 
     "index": "no", 
     "include_in_all": false, 
     doc_values : false, 
     store : true, 
}, 

Oprion 2:それは文字列フィールドであるとしてHTMLを持っている(myindex2はインデックス名で、HTMLフィールドがそのままプレーンな文字列がある)

"Html": { 
      "type": "string", 
      "index": "no", 
      "include_in_all": false, 
      doc_values : false, 
      store : true, 
    }, 

実験: 1)I 2)ファイル "Html"を圧縮してbase64に変換し、ESインデックス(myindex1) にロードしました。3)同じ10kデータサンプルをmyindex2にロードしました。

理論的には、圧縮データのサイズは小さくする必要があります。私の前提は、myindex1のサイズはmyindex2より小さくなければならないということでした。

しかし、私はそれをverifedとき、

  • myindex1 - > 228.3メガバイト
  • myindex2 - 私たちは(圧縮なし)myindex2の大きさの上に見るように> 222.3メガバイト

小さくなる。

なぜmyindex2のサイズがmyindex1よりも小さいのですか?

答えて

0

Base64は、圧縮アルゴリズムではなくエンコードアルゴリズムです。

Base64でエンコードされたデータのサイズは、エンコードされていないデータの約1.37倍です。したがって、あなたが観察していることは完全に正常です。

Base64の主な目的は、バイナリデータをASCII形式でエンコードすることです。圧縮アルゴリズムをお探しの場合は、ZIP、LZFなどのfew choicesがあります

+0

ありがとうございます。私が圧縮に何を意味したかは次のとおりです:Html =(zlib.compress(Html.encode( 'utf-8')、9))。encode( 'base64')。私は実際にPythonでzlibを使って文字列を圧縮してからBase64に変換します – Backtrack

+0

私の質問が更新されました。私はoption1で提出されたHTMLを圧縮するためにZlibを使用しています。 – Backtrack

+0

zlibの部分は非常に重要な情報のビットでした;-) – Val