2016-11-02 7 views
0

나는 탄성 검색에 빠른 질문이 있습니다. HTML 파일이 있는데 다른 필드가있는 색인에 저장하려고합니다. 나는 두 개의 서로 다른 인덱스를 다음과 같이 만든탄성 검색 인덱스 크기

,

옵션 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) 내가 2) 압축하여 "Html"을 base64로 변환하고 ES 인덱스 (myindex1) 에로드 3) 동일한 10k 데이터 샘플을 myindex2에로드했습니다.

이론적으로 압축 된 데이터의 크기는 작아야합니다. 그래서 내 가정은 myindex1 크기가 myindex2보다 작아야한다는 것입니다.

하지만 그것을 verifed 때

  • myindex1 -> 228.3mb
  • myindex2 - 우리는 (압축 없음) myindex2의 크기로서 상기 참조> 222.3mb

작습니다.

왜 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

내 질문이 업데이트되었습니다. 나는 Zlib을 사용하여 option1에 Html을 압축한다. – Backtrack

+0

zlib 부분은 꽤 중요한 정보 비트였습니다 :-) – Val