# Elasticsearch - [[ES Query String]] - [[Elasticsearch Getting Started]] - [[kibana]] ### 도큐먼트에서 텍스트 추출 도큐먼트에서 텍스트를 추출하는 데 특화된 라이브러리인 [[open:아파치 티카]]를 첨부 플러그인이 내부적으로 사용한다. 첨부 파일 필드는 아파치 티카의 메타데이터와 텍스트 추출기가 처리한 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을 지원하지 않는다. - 데이터의 업데이트를 제공하지 않는다.