Elasticsearch
도큐먼트에서 텍스트 추출
도큐먼트에서 텍스트를 추출하는 데 특화된 라이브러리인 아파치 티카를 첨부 플러그인이 내부적으로 사용한다.
첨부 파일 필드는 아파치 티카의 메타데이터와 텍스트 추출기가 처리한 base64바이너리 스트림을 받는다.
이 필드는 하위 필드에 여러 내용을 저장하는 다중 필드처럼 보일 수 있다.
- file: 파일의 본문을 저장한다.
- date: 티카의 메타데이터가 추출한 파일 생성일을 저장한다.
- author: 티가의 메타데이터가 추출한 파일의 저자를 저장한다.
- keywords: 티카의 메타데이터가 추출한 파일의 키워드를 저장한다.
- content_type: 파일의 본문 타입을 저장한다.
- title: 티카의 메타데이터가 추출한 파일의 제목을 저장한다.
기본 타입 매핑하기
매핑을 세밀하게 조정하면, 다음과 같은 장점이 있다.
- 디스크의 색인 크기가 줄어든다 (사용자 정의 필드의 기능을 비활성화)
- 관심 있는 필드만 색인한다 (일반적인 성능 향상)
- 빠른 검색 또는 (집계 같은) 실시간 분석을 위해 데이터를 미리 색인한다.
- 필드를 다중 토큰에서 분석해야 할지 또는 필드를 하나의 토큰으로 분석할지 여부를 올바로 정의한다.
색인 생성하기
일래스틱서치는 색인 이름을 저장소의 디렉토리로 매핑한다.
curl -XPUT http://127.0.0.1:9200/myindex -d '{ "settings": { "index": { "number_of_shards": 2, "number_of_replicas": 1 } } }'
정상 동작, 리턴
{"acknowledged": true}
색인이 이미 존재한다면, 400 에러를 리턴
{ "error": "IndexAleardyExistsException[[myindex] Already exists]", "status": 400 }
색인 삭제하기
색인의 삭제는 샤드, 매핑, 데이터를 삭제하는 것을 의미한다. 다음처럼 색인을 삭제해야 하는 일반적인 시나리오가 있다.
- 원하지 않거나 불필요한 데이터를 지우기 위해 색인 삭제하기 (예를 들어, 오래도니 로그스태시 색인)
- 테스트용 재시작 스크립트를 위한 색인 재설정하기
- 실패로 인해 데이터가 손실됐을 때, 클러스터를 올바른 상태로 되돌리기 위해 샤드의 색인 삭제하기
색인을 삭제하면, 색인과 관련된 모든 데이터가 디스크에서 제거되고 사라진다.
색인 삭제 시 샤드가 저장소에서 삭제되면 먼저 클러스터가 변경된다. 재귀적으로 삭제하는 파일시스템 구현 때문에 일래스틱서치 삭제 자업은 빠르다.
백업이 없다면, 삭제된 색인은 복원할 수 없다.
색인 열고 닫기
curl -XPOST http://127.0.0.1:9200/myindex/_close
curl -XPOST http://127.0.0.1:9200/myindex/_open
색인을 닫아야 하는 시나리오는 다음과 같다.
- 일부 날짜 기반 색인을 닫는다. 예를 들어 여러 색인을 온라인(최근 2달 동안)과 오프라인(2~6달)으로 유지하고 싶다면, 한 달, 한 주, 하루 동안으로 색인을 유지한다.
- 클러스터에서 열려 있는 모든 색인을 검색할 수 있지만, 일부 색인은 검색되지 않게 하고 싶다(이 경우에는 앨리어스를 사용하는 것이 가장 좋은 방법이지만, 색인을 닫아 못 쓰게 할 수도 있다.)
색인에 매핑 저장하기
curl -XPOST 'http://localhost:9200/myindex/_mapping' -d '{ "properties": { ... } }'
매핑 얻기
- http://server/_mapping
- http://server/index_name/_mapping
- http://server/index_name/type_name/_mapping
리턴된 매핑은 축소된 형태로서, 필드의 기본값은 리턴하지 않는다.
매핑 질의는 다음과 같은 여러 목적으로 쓰인다.
- 템플릿 레벨로 매핑할 때 디버깅하기
- 필드를 묵시적인 매핑으로 추측해 올바르게 파생됐는지 확인하기
- 타입과 관련된 정보를 저장하기 위해 매핑의 메타데이터를 얻기
- 매핑이 올바른지 간단하게 확인하기
매핑 삭제하기
매핑 삭제는 파괴적인 작업이며, 데이터 손실을 방지하도록 주의를 기울여 작업한다.
매핑 삭제가 필요한 시나리오는 다음과 같다.
- 사용하지 않는 타입: 데이터를 깨끗이 하기 위해 매핑을 삭제한다.
- 잘못된 매핑: 매핑을 변경해야 하지만, 일부 필드를 업그레이드 또는 삭제할 수 없다. 데이터를 백업하고 새로운 매핑을 생성한 후 백업에서 데이터를 읽는다.
- 타입의 빠른 정리: 매핑을 삭제하고 다시 생성할 수 있다.
색인 새로 고치기
curl -XPOST 'http://localhost:9200/myindex/_refresh'
health
http://[URL]:[PORT]/_cat/indices?v&s=index
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size yellow open [index] [uuid] 1 1 2 0 10.6kb 10.6kb
모든 doc 조회
http://URL/INDEX/_search?pretty=true&q=*:*
search query
http://[URL]:[PORT]/[INDEX]/_search?pretty
{ "from": 0, "size": 1000, "sort": [ { "updated_at": { "order": "asc" } } ], "query": { "match": { "search": { "query": "스커트 타임", "fuzziness": "AUTO" } } } }
count
http://[URL]:[PORT]/[INDEX]/_count?
{ "count": 34384, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 } }
ES와 RDBMS
ES | RDBMS |
---|---|
Index | Database |
Shard | Partition |
Type | Table |
Document | Row |
Field | Column |
Mapping | Schema |
Query DSL | SQL |
Elastic Search는 기본적으로 http프로토콜로 접근
ES HTTP Method | RDBMS SQL |
---|---|
GET | SELECT |
PUT | INSERT |
POST | UPDATE, SELECT |
DELETE | DELETE |
HEAD (인덱스 정보확인) |
ES의 특징
장점
- 오픈소스 검색엔진
- 전문검색
- 통계 분석
- Schemaless
- RESTful API
- Multi-tenancy
- Document-Oriented
- Inverted Index 역색인
- 확장성
단점
- 완전 실시간은 아니다.
- Transaction Rollback을 지원하지 않는다.
- 데이터의 업데이트를 제공하지 않는다.