[엘라스틱서치] ES document(ppt, excel, word, pdf) 파일 색인(아파치 티카 사용) - forewalk/elastic GitHub Wiki

Elasticsearch

plugin


엘라스틱에 문서파일을 넣는 방법은 몇 가지 방법이 존재한다. 이번엔 TIKA plugin을 통해서 색인하는 방법을 알아볼텐데, 순서는 다음과 같다.

  1. apache tika MS office apache poi(hwp) 등 -그외에도 오픈소스 프로젝트가 다양

  2. base64로 변환, 개발 라이브러리로 진행가능 / 혹은 웹사이트로 가능(python으로 진행한 파일은 첨부하였다)

  3. ES로 색인 3-1) base64로 변환한 파일, json형태로 변환 3-2) ES plugin 설치 TIKA, PoI plugin은 개발 필요할 듯 3-3) ingest pipeline 전처리 3-4) ES로 데이터 색인

엘라스틱서치에선 Apache Tika를 플러그인을 ingest-attachment하는 이름으로 제공하고 있다. 우리가 주로 사용하던 plugin은 language에 대한 plugin이 많았지만, 해당 tika의 경우 pipeline plugin으로 사용하기 위해선 ingest를 통해야 한다. 아파치 티카의 경우 여러 비정형데이터를 처리할 수 있는 프로젝트지만, 사실 소스필드가 base64로 변환되어야 사용 가능하다. 문서 자체로는 불가능하다는 점이 필수일 것이다. base64에 대한 설명 지원하는 포멧은 사실 다양한데, 사용해볼 수록.. 음 ....... 지원하는 포멧은 다음과 같다. 참조

먼저 ES 에서 attachment plugin을 설치해야 한다. https://www.elastic.co/guide/en/elasticsearch/plugins/master/ingest-attachment.html tika_1

파이프라인을 먼저 만들어서 base64는 삭제하고 디코딩 된 데이터만 남도록 한다.

PUT _ingest/pipeline/attachment
{
  "processors": [
    {
      "attachment": {
        "field": "data"
      }
    },
    {
      "remove": {
        "field": [
          "data"
        ]
      }
    },
    {
      "split": {
        "field": "attachment.content",
        "separator": """\-.[0-9].+\-""",
        "ignore_failure": true
      }
    },
    {
      "trim": {
        "field": "attachment.content"
      }
    },
    {
      "gsub": {
        "field": "attachment.content",
        "pattern": "\n",
        "replacement": ""
      }
    },
    {
      "gsub": {
        "field": "attachment.content",
        "pattern": "\t",
        "replacement": ""
      }
    }
  ]
}

업로드한 파이썬을 통해 base64로 인코딩 한 내용은 다음과 같다.(물론 웹사이트 이용 가능) tika_2 파이프라인을 통해 파일을 엘라스틱서치에 색인한다. tika_3

색인 결과는 다음과 같다. tika_4

이슈:

  1. 용량이 100m이상 되는 데이터는 색인이 되지 않는다. yml http 옵션을 수정하면 되긴 하지만, 이걸 얼마나 늘릴지.. 고민은 해야하겠다.
  2. pdf가 ocr이 제대로 되지 않은 파일들을 문자가 깨진다.
  3. 당연한 얘기지만, 색인시 문서암호화 등은 모두 해제해야 한다.

파일참조 py