Elasticsearch 기본활용
— Big Data — 1 min read
...특징
- java application이고 구동시 시간이 걸린다. 리소스 사용이 인텐스하다. 서버 사양이 좋아야 한다.
- ELK 스택을 이용하여 로그 분석툴로 많이 사용된다.
- 역색인(Reverse Indexing)을 통해 검색이 상당히 빠르다.
- NoSQL 인데 Full Text 검색이 가능하다.
- 검색엔진을 위한 솔루션이지만 잘 만 사용한다면 메인 DB로도 사용가능하지만 만약을 위해 메인 DB를 구성하고 혼용하는것이 옳아 보인다.
- 머신러닝 활용을 위한 정제된 데이터 저장소로도 활용가능하다.
개발 환경 설치
- docker 에 올려서 사용해 본다.
- 프로덕션시에는 docker swarm으로 클러스터 구성해서 여러개의 노드로 분선처리한다.
프로덕션시 주의사항
- java heap size 세팅 호스트 메모리의 50% 정도가 적당하다.
- vm.max_map_count는 최소 262144로 호스트 마다 세팅 되어야 한다.
- docker swarm 클러스터 구성시 데이터를 위한 공유볼륨을 만들어 줘야한다. (예. nfs volume)
알아야할 용어
ES | RDBMS |
---|---|
Index | Database |
Type (deprecated from ver. 6?) | Table |
Document | Row |
docker service 구성
docker-stack.yml
elasticsearch.yml
kibana.yml
Rest API
indexing
mapping
- Document생성시 index가 없다면 자동으로 생성되면서 각 feild마다 mapping이 sub field를 가진 기본 mapping이 세팅된다. 이는 필요없는 용량을 차지하게 된다.
- 한번 세팅되어진 mapping은 수정이 불가하기 때문에 index생성시 mapping을 해줘야 한다.
Reindex
- index의 remapping이 필요할때 새로운 mapping으로 새로운 index를 만들어서 reindex하여 데이터를 가져온다.
Bulk indexing
Pagenation
- from, size 속성값으로 페이지네이션 구현이 가능하다.
- 기본값은 size; 10, from: 0
- 단 from을 설정하더라도 문서를 처음 부터 읽으면서 찾기 때문에 많은 페이지 구현은 서버에 부담이 된다.
검색 기본
- 모든문서
- query context (scored)
- match
- match_phrase_prefix
- filter context (not scored)
- bool query를 이용해야한다. (must, filter, should, must_not)
고급검색
analyzer, tokenizer를 이용하여 동의어 검색, 오타수정, 제시어 등등에 활용될 수 있다.
한글검색은 3rd-party 검색기를 사용해야한다. 1
To create index with analyzer setting
- To search
Elasticsearch client libraries
- 한글자동완성 가이드를 참조하세요.↩