본문 바로가기
Programming/Elasticsearch

[Elasticsearch] index API 살펴보기

by peter paak 2021. 3. 9.
728x90

Create Index

index 
    aliases
    mappings
    settings

request

PUT twitter
  • 인덱스 이름은 아래 규칙을 따른다
    • Lowercase only
    • Cannot include \, /, ``, ?, ", <, >, |, (space character), ,, #
    • Indices prior to 7.0 could contain a colon (:), but that’s been deprecated and won’t be supported in 7.0+
    • Cannot start with ``, _, +
    • Cannot be . or ..
    • Cannot be longer than 255 bytes (note it is bytes, so multi-byte characters will count towards the 255 limit faster)

1. index setting

PUT twitter
{
  "settings": {
            "number_of_shards" : 3,
      "number_of_replicas" : 2
  }
}
  • default
    • number_of_shards : 5
    • number_of_replicas : 1
  • 자세한 내용은 index module에 나와있다
    • index module은 index마다 생성되고 index에 관한 모든 내용을 컨트롤 한다
    • staticdynamic 세팅 방법이 있다
      1. static : 생성, 삭제 시점에 세팅
      2. dynamic : 인덱스가 살아있는 시점에서만 세팅 (update-index-setting으로 가능)

2. mappings

PUT twitter
{
    "mappings" : {
        "_doc" : {
            "properties" : {
                "name" : { "type" : "text" }
            }
        }
    }
}
  • _doc
    • index 안의 type이름
    • 7버전 이후로 사용하지 않으므로 그냥 없이 properties에 추가해도 된다
    • 6버전에서 사용하지 않으러면 include_type_name=false를 추가한다

3. aliases

alias
    filter
    routing
PUT twitter
{
  "aliases": {
    "twitter_clone": {
      "filter": {
        "term": {
          "user": "kimchy"
        }
      },
      "routing": "kimchy"
    }
  }
}
  • alias는 하나 이상의 index와 매핑될 수 있다
    • alias의 목적은 검색 시, 필터링된 결과를 자동 반환할 수 있다
    • 불필요한 shard가 실행되는 것을 막도록 routing도 사용할 수 있다
    • 또한 search 할 때 자동으로 적용되는 filter, routing values를 설정할 수 있다
  • index와 같은 이름을 사용할 수 없다.
  • 자세한 내용은 index 참조

wait for active shards

{
    "acknowledged": true,
    "shards_acknowledged": true,
    "index": "test"
}
  • 기본적으로 각 shard의 primary copy가 시작되거나 오류가 발생하면 response 한다
  • 기본적으로 인덱스를 생성하면 index와 shard copy를 생성한다
    1. index가 cluster에 생성
    2. shard에 shard copy를 생성
  • 둘다 false가 될 수 있다. 그냥 timeout전에 명령이 완료되었는지만 알려줄 뿐이다
  • 자세한 내용은 wait for active shards 참고

사용되는 옵션에 대해 자세히 보면 다음과 같다

  • acknowledged
    • index가 cluster에 잘 생성되었는지 유무
  • shards_acknowledged
    • 필요한 수의 shard copy가 각 shard에 시작되었는지 유무

기본 옵션을 사용하고 싶지 않은 경우

PUT twitter
{
  "settings": {
    "index.write.wait_for_active_shards": "2"
  }
}
  • 기본설정에서 active shard 2개가 뜰때까지 기다리게 할 수도 있다
  • 생각보다 오래 걸린다. 타임아웃이 날 수도 있다.
{
  "statusCode": 504,
  "error": "Gateway Time-out",
  "message": "Client request timeout"
}

skipping type

PUT test?include_type_name=false
{
  "mappings": {
    "properties": {
      "foo": {
        "type": "keyword"
      }
    }
  }
}
  • elasticsearch 7 버전 이후로 기본적으로 type 을 사용할 수 없다.
  • mapping 생성 시, include_type_name=false를 추가한다

Delete Index

request

DELETE /twitter
  • _all, * 로 전체 인덱스 삭제 가능 (조심!)
  • 만약 해당 옵션으로 삭제하지 못하게 하려면
    • action.destructive_requires_nametrue 로 설정한다

response

{
  "acknowledged" : true
}

출처

728x90