[엘라스틱서치] ES document(ppt, excel, word, pdf) 파일 색인(아파치 티카 사용) - forewalk/elastic GitHub Wiki
Elasticsearch
plugin
엘라스틱에 문서파일을 넣는 방법은 몇 가지 방법이 존재한다. 이번엔 TIKA plugin을 통해서 색인하는 방법을 알아볼텐데, 순서는 다음과 같다.
-
apache tika MS office apache poi(hwp) 등 -그외에도 오픈소스 프로젝트가 다양
-
base64로 변환, 개발 라이브러리로 진행가능 / 혹은 웹사이트로 가능(python으로 진행한 파일은 첨부하였다)
-
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
파이프라인을 먼저 만들어서 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로 인코딩 한 내용은 다음과 같다.(물론 웹사이트 이용 가능)
파이프라인을 통해 파일을 엘라스틱서치에 색인한다.
색인 결과는 다음과 같다.
이슈:
- 용량이 100m이상 되는 데이터는 색인이 되지 않는다. yml http 옵션을 수정하면 되긴 하지만, 이걸 얼마나 늘릴지.. 고민은 해야하겠다.
- pdf가 ocr이 제대로 되지 않은 파일들을 문자가 깨진다.
- 당연한 얘기지만, 색인시 문서암호화 등은 모두 해제해야 한다.