YOGAE

TODO: FIXME:

API Conventions

21 Jan 2019

Multiple Indices

index parameter를 참조하는 대부분의 APIs는 multiple indices를 지원합니다. wildcard를 또한 지원합니다.

# example
/users,events,pages/_search
/u*,e*,p*/_search

모든 multi indices API는 아래의 query string parameter를 지원합니다.

  • ignore_unavailable

    특정 indices가 사용이 불가능 하다면 무시할지를 결정합니다. true 또는 false

  • allow_no_indices

    wildcard 표현에 구체적인 indices가 없다면 실패여부를 제어합니다. true 또는 false

  • expand_wildcards

    open이라면 오직 open indices만 확장되고 closed일 경우 오직 close만 확장합니다. 모든 indices를 확장하기 위해서 open,closed 두 값을 모두 넣을 수 있습니다(all과 똑같이 작동). none은 wildcard 확장을 막습니다.

Date math support in index names

Date math index name은 Time-series indices의 범위로 검색이 가능합니다. indices의 개수를 제한하여 cluster에 load를 감소시키고 실행 performance를 향상시킵니다.

date math index name은 모두 중괄호 안에 있어야하며, 모든 특수문자는 URI encode해야 합니다.

<static_name{date_math_expr{date_format|time_zone}}>
static_name is the static text part of the name
date_math_expr is a dynamic date math expression that computes the date dynamically
date_format is the optional format in which the computed date should be rendered. Defaults to YYYY.MM.dd.
time_zone is the optional time zone . Defaults to utc.

현재시간을 2024-03-22로 가정한 example입니다.

Expression Resolves to
<logstash-{now/d}> logstash-2024.03.22
<logstash-{now/M}> logstash-2024.03.01
<logstash-{now/M{YYYY.MM}}> logstash-2024.03
<logstash-{now/M-1M{YYYY.MM}}> logstash-2024.02
<logstash-{now/d{YYYY.MM.dd|+12:00}}> logstash-2024.03.23

Date Math

date value 형식의 대부분의 parameter(gt와 lt같은 range quer, from과 to같은 daterange aggregations)는 date math를 이해합니다.

  • +1h - 한 시간 더하기
  • -1d - 한 시간 빼기
  • /d - 가까운 날짜로 반올림
y years
M months
w weeks
d days
h hours
H hours
m minutes
s seconds

Response Filtering

모든 REST APIS는 Elasticsearch에서 반환되는 response를 줄이기 위하여 filter_path parameter를 사용할 수 있습니다. 이 parameter는 , 으로 filter를 분리할 수 있습니다.

GET /_search?q=elasticsearch&filter_path=took,hits.hits._id,hits.hits._score

{
  "took" : 3,
  "hits" : {
    "hits" : [
      {
        "_id" : "0",
        "_score" : 1.6375021
      }
    ]
  }
}

* 를 사용할 수 있습니다.

GET /_cluster/state?filter_path=metadata.indices.*.stat*

{
  "metadata" : {
    "indices" : {
      "twitter": {"state": "open"}
    }
  }
}

** 는 field의 정확한 path를 알 수 없을 때 사용할 수 있습니다.

GET /_cluster/state?filter_path=routing_table.indices.**.state

{
  "routing_table": {
    "indices": {
      "twitter": {
        "shards": {
          "0": [{"state": "STARTED"}, {"state": "UNASSIGNED"}],
          "1": [{"state": "STARTED"}, {"state": "UNASSIGNED"}],
          "2": [{"state": "STARTED"}, {"state": "UNASSIGNED"}],
          "3": [{"state": "STARTED"}, {"state": "UNASSIGNED"}],
          "4": [{"state": "STARTED"}, {"state": "UNASSIGNED"}]
        }
      }
    }
  }
}