999 - Elasticsearch 빠른 시작
Elasticsearch REST API
Elasticsearch는 포괄적이고 강력한 REST API를 제공합니다.
Elasticsearch 요청 형식://
설명서
빠른 시작 예
집단 정보
클러스터 건강치:
green
: 모든 것이 정상입니다.(클러스터링 기능 제공)yellow
: 모든 데이터를 사용할 수 있으며 일부 복사본은 아직 분배되지 않았습니다.(클러스터링 기능 제공)red
: 일부 데이터는 어떤 이유로 사용할 수 없습니다.(클러스터 부분 기능 사용 가능)GET /_cat/health?v
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1555378987 01:43:07 elasticsearch green 1 1 4 4 0 0 0 0 - 100.0%
노드 정보
모든 노드를 나열합니다.
GET /_cat/nodes?v
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
127.0.0.1 49 73 11 mdi * m9Y7FJV
색인 정보
모든 색인을 나열합니다.
GET /_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .monitoring-es-6-2019.04.16 IND0TKuCQsyHTH2FDE1zdg 1 0 5478 36 2.7mb 2.7mb
green open .kibana_1 XTsD7vQ7QbukbJpFlkfLQQ 1 0 4 0 14.4kb 14.4kb
green open .kibana_task_manager 0G59n4AWQzSxJ6YSHBDPnA 1 0 2 0 12.5kb 12.5kb
green open .monitoring-kibana-6-2019.04.16 -SZdui1tTw-srkqmUxzQHw 1 0 684 0 309.2kb 309.2kb
색인 만들기
색인을 만듭니다.customer, 슬라이스 2개, 0 복사본입니다.
# PUT /customer
# PUT /customer?pretty
PUT /customer?pretty
{
"settings": {
"number_of_shards": 2,
"number_of_replicas": 0
}
}
주의: 기본값은 5개의 섹션 1개의 복사본입니다. 노드가 하나만 있으면 섹션이 분배되지 않고 그룹 상태는 YELLOW입니다.
pretty(pretty-printed)를 설명하고 예시를 보고 pretty를 추가할 때:
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "customer"
}
pretty가 추가되지 않았을 때:
{"acknowledged":true,"shards_acknowledged":true,"index":"customer"}
색인 삭제
customer 인덱스를 삭제합니다.
DELETE /customer?pretty
새 문서
PUT 추가: id는 1이고 name 필드 값은 "Put Add"입니다.또한 문서를 추가할 때 색인과 형식을 미리 만들지 않아도 됩니다.elasticsearch는 자동으로 만들 수 있습니다.
PUT /customer/_doc/1?pretty
{
"name": "Put Add"
}
응답
{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
방금 추가된 데이터를 조회하다
GET /customer/_doc/1?pretty
{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"_seq_no" : 0,
"_primary_term" : 1,
"found" : true,
"_source" : {
"name" : "Put Add"
}
}
POST 신규 사용: id 자동 생성
POST /customer/_doc?pretty
{
"name": "Post Add"
}
응답
{
"_index" : "customer",
"_type" : "_doc",
"_id" : "RYeuJGoB_H2WuLZOyvLU",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
문서 업데이트
Elasticsearch는 실제로 문서를 업데이트하는 것이 아니라 새 문서를 만듭니다.
PUT 업데이트 사용: ID가 같은 경우 교체되며 업데이트에 해당합니다.
PUT /customer/_doc/1?pretty
{
"name": "PUT Update"
}
응답:_버전,result가 바뀌었습니다.
{
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
포스트 업데이트 1.필드 업데이트
POST /customer/_doc/1/_update?pretty
{
"doc": {
"name": "Post Update"
}
}
2. 업데이트와 동시에 필드를 추가합니다.
POST /customer/_doc/1/_update?pretty
{
"doc": {
"name": "Baozi",
"age": "21"
}
}
3. 스크립트 업데이트로 연령 5세 증가
POST /customer/_doc/1/_update?pretty
{
"script": "ctx._source.age += 5"
}
문서 삭제
DELETE /customer/_doc/1?pretty
DELETE /customer/_doc/RYeuJGoB_H2WuLZOyvLU?pretty
대량 작업
대량 작업 유형:
POST /customer/_doc/_bulk?pretty
{"index":{"_id":"1"}}
{"name":"Baozi1"}
{"index":{"_id":"2"}}
{"name":"Baozi2"}
문서 1 업데이트, 문서 삭제 2
POST /customer/_doc/_bulk?pretty
{"update":{"_id":"1"}}
{"doc":{"name":"Baozi1 Updated"}}
{"delete":{"_id":"2"}}
대량 작업은 실패 중 하나로 인해 후속 작업을 중단하지 않습니다.종료 후 응답 메시지가 순차적으로 반환됩니다.예: 삭제 오류 수정은 중단되지 않으며, 작업 형식의 오류는 실행을 무시합니다.
POST /customer/_doc/_bulk?pretty
{"index":{"_id":"1"}}
{"name":"Baozi1"}
{"create":{"_id":"1"}}
{"name":"Baozi1"}
{"indexed":{"_id":"2"}}
{"name":"Baozi2"}
{"update":{"_id":"10000"}}
{"doc":{"name":"Baozi10000"}}
{"delete":{"_id":"100000"}}
{"delete":{"_id":"100001"}}
빠른 시작 질의 예
데이터 가져오기
공식 샘플 데이터 사용, 형식:{
"account_number": 0,
"balance": 16623,
"firstname": "Bradshaw",
"lastname": "Mckenzie",
"age": 29,
"gender": "F",
"address": "244 Columbus Place",
"employer": "Euron",
"email": "[email protected]",
"city": "Hobucken",
"state": "CO"
}
{
"account_number": 0,
"balance": 16623,
"firstname": "Bradshaw",
"lastname": "Mckenzie",
"age": 29,
"gender": "F",
"address": "244 Columbus Place",
"employer": "Euron",
"email": "[email protected]",
"city": "Hobucken",
"state": "CO"
}
bulk request must be terminated by newline
PUT /bank?pretty
{
"settings": {
"number_of_shards": 2,
"number_of_replicas": 0
}
}
@
는 반드시 있어야 합니다. 그렇지 않으면 오류가 발생합니다bulk request must be terminated by newline
$ curl -H "Content-Type: application/json" -XPOST "localhost:9200/bank/_doc/_bulk?pretty&refresh" --data-binary "@ "
URI Search
q
: 조회할 필드 sort
: 정렬할 필드, asc 오름차순, desc 거꾸로GET /bank/_search?q=*&sort=account_number:asc&pretty
결과의 필드를 되돌려줍니다.
took
: ES가 검색을 실행하는 시간, 밀리초timed_out
: 검색 시간 초과 여부를 알려줍니다_shards
: 몇 개의 조각을 검색했는지, 검색 성공/실패 개수를 알려줍니다.hits
: 검색 결과hits.total
: 검색 조건에 맞는 총 수hits.hits
: 검색 결과hits.hits.sort
: 정렬에 사용되는 필드입니다. 지정되지 않으면 점수에 따라 정렬됩니다.hits.max_score
, hits.hits._score
: 관련성 점수, 점수가 높을수록 검색 조건과 가깝다는 것을 나타낸다.Request Body Search
예제
match_all
: match_all 조회, 모든 필드 조회 sort
: 정렬에 사용되는 필드입니다.from
: 어디서부터 시작하고 기본값은 0부터 시작합니다.size
: 몇 개 검색, 기본 10개._source
: 반환할 필드를 지정합니다.GET /bank/_search
{
"query": {"match_all": {}},
"sort": [
{
"account_number":"asc"
}
],
"from": 10,
"size": 2,
"_source": ["account_number","balance"]
}
match 조회address는
mill
또는 lane
을 포함합니다.팁: ES에서 데이터를 저장할 때 mill lane
과 mill
으로 나누어 하나의 단어를 만들 수 있습니다. 조회하려면 lane
다음 match_phrase의 예.GET /bank/_search
{
"query": {
"match": {
"address": "mill lane"
}
}
}
match_phrase 조회address는
mill lane
를 포함합니다.GET /bank/_search
{
"query": {
"match_phrase": {
"address": "mill lane"
}
}
}
boolbool 조회의 장점은 여러 가지 조건 (match, match_phrase 등) 을 조합할 수 있다는 것이다.
mill lane
: 모든 일치 조건을 만족시킵니다.must
: 일치하는 조건 중 하나를 충족시킵니다.should
: 조건을 충족시키지 않으면 안 됩니다.must_not
: 내용을 필터링하고 관련성 산점을 하지 않습니다.must: 조회는
filter
와mill
의address를 동시에 포함합니다.GET /bank/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"address": "mill"
}
},
{
"match": {
"address": "lane"
}
}
]
}
}
}
should: 조회는
lane
또는 mill
의address를 포함합니다.GET /bank/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"address": "mill"
}
},
{
"match": {
"address": "lane"
}
}
]
}
}
}
must_not:질의가 포함되지 않음
GET /bank/_search
{
"query": {
"bool": {
"must_not": [
{
"match": {
"address": "mill"
}
},
{
"match": {
"address": "lane"
}
}
]
}
}
}
조합 match,must_not 등: 40세에 아이디(Idaho의 줄임말)에 거주하지 않는 사람을 조회합니다.
GET /bank/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"age": "40"
}
}
],
"must_not": [
{
"match": {
"state": "ID"
}
}
]
}
}
}
filter: 주소
lane
또는mill
을 포함하는 것을 필터링하여 잔액이 30000보다 큰 것을 찾습니다.GET /bank/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"address": "mill lane"
}
}
],
"filter": {
"range": {
"balance": {
"gte": 30000
}
}
}
}
}
}
집합 조회 예시 1: 집합 예시,state에 따라 그룹을 나누어 100개의 집합 결과를 되돌려줍니다.설명: 바깥쪽의size를 0으로 설정한 것은 문서를 되돌리지 않고 집합 결과만 되돌려 주기 위해서입니다.field 필드 아래의size는terms 집합이 몇 개의 집합 결과를 되돌려주는지 기본 10개를 나타냅니다.
GET /bank/_search
{
"aggs": {
"group_by_state": {
"terms": {
"field": "state.keyword",
"size": 100
}
}
},
"size": 0
}
예시2: 플러그인 집합은 이전 예시를 바탕으로 각 주의 평균 잔액을 계산한다.
GET /bank/_search
{
"aggs": {
"group_by_state": {
"terms": {
"field": "state.keyword",
"size": 100
},
"aggs": {
"average_balance": {
"avg": {
"field": "balance"
}
}
}
}
},
"size": 0
}
예시 3: 집합 정렬, 다음 예시, 평균 잔액에 따라 정렬.
GET /bank/_search
{
"aggs": {
"group_by_state": {
"terms": {
"field": "state.keyword",
"size": 100,
"order": {
"average_balance": "desc"
}
},
"aggs": {
"average_balance": {
"avg": {
"field": "balance"
}
}
}
}
},
"size": 0
}
예시4: 연령에 따라 구역을 나눈 다음에 성별에 따라 그룹을 나누고 마지막으로 각 그룹의 평균 잔액을 구한다.
GET /bank/_search
{
"aggs": {
"group_by_age": {
"range": {
"field": "age",
"ranges": [
{
"from": 20,
"to": 29
},
{
"from": 30,
"to": 39
},
{
"from": 40,
"to": 49
}
]
},
"aggs": {
"group_by_gender": {
"terms": {
"field": "gender.keyword"
},
"aggs": {
"average_balance": {
"avg": {
"field": "balance"
}
}
}
}
}
}
},
"size": 0
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.