open:elasticsearch

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": {
    ...
  }
}'

리턴된 매핑은 축소된 형태로서, 필드의 기본값은 리턴하지 않는다.

매핑 질의는 다음과 같은 여러 목적으로 쓰인다.

  • 템플릿 레벨로 매핑할 때 디버깅하기
  • 필드를 묵시적인 매핑으로 추측해 올바르게 파생됐는지 확인하기
  • 타입과 관련된 정보를 저장하기 위해 매핑의 메타데이터를 얻기
  • 매핑이 올바른지 간단하게 확인하기

매핑 삭제는 파괴적인 작업이며, 데이터 손실을 방지하도록 주의를 기울여 작업한다.
매핑 삭제가 필요한 시나리오는 다음과 같다.

  • 사용하지 않는 타입: 데이터를 깨끗이 하기 위해 매핑을 삭제한다.
  • 잘못된 매핑: 매핑을 변경해야 하지만, 일부 필드를 업그레이드 또는 삭제할 수 없다. 데이터를 백업하고 새로운 매핑을 생성한 후 백업에서 데이터를 읽는다.
  • 타입의 빠른 정리: 매핑을 삭제하고 다시 생성할 수 있다.

curl -XPOST 'http://localhost:9200/myindex/_refresh'

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

http://URL/INDEX/_search?pretty=true&q=*:*

http://[URL]:[PORT]/[INDEX]/_search?pretty

{
    "from": 0,
    "size": 1000,
    "sort": [
        {
           "updated_at": {
              "order": "asc"
           }
        }
    ],
    "query": {        
        "match": {
            "search": {
                "query": "스커트 타임",
                "fuzziness": "AUTO"
            }
        }
    }
}

http://[URL]:[PORT]/[INDEX]/_count?

{
    "count": 34384,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    }
}

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 (인덱스 정보확인)
  • 오픈소스 검색엔진
  • 전문검색
  • 통계 분석
  • Schemaless
  • RESTful API
  • Multi-tenancy
  • Document-Oriented
  • Inverted Index 역색인
  • 확장성
  • 완전 실시간은 아니다.
  • Transaction Rollback을 지원하지 않는다.
  • 데이터의 업데이트를 제공하지 않는다.

  • open/elasticsearch.txt
  • 마지막으로 수정됨: 2021/06/09 09:20
  • 저자 127.0.0.1