999 - Elasticsearch 빠른 시작

14368 단어

Elasticsearch REST API


Elasticsearch는 포괄적이고 강력한 REST API를 제공합니다.
  • 집단, 노드, 색인의 건강, 상태 및 통계 정보를 검사한다.
  • 당신의 집단, 노드와 색인 데이터, 메타데이터를 관리합니다.
  • 색인을 CRUD합니다.
  • 페이지 나누기, 정렬, 필터링, 스크립트 작성, 집합 및 기타 고급 검색을 수행합니다.

  • Elasticsearch 요청 형식://

    설명서

  • 공부는Elasticsearchv6.7.1입니다.
  • 예시는 모두 Kibana를 사용합니다. 만약에 Kibana가 제 홈페이지나 다른 사람의 Kibana 강좌를 볼 수 있는지 모르면 DevTools가 어떻게 사용하는지 보기만 하면 됩니다. 잠시만요. Postman, Restlet Client, curl 등으로 REST 요청을 보낼 수 있습니다.

  • 빠른 시작 예


    집단 정보


    클러스터 건강치:
  • 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
    

    대량 작업


    대량 작업 유형:
  • index: 존재하지 않으면 만들고, 존재하면 업데이트
  • create: 만들기
  • delete: 삭제
  • update: 업데이트
  • 두 개의 문서를 만듭니다.
    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"
    }
    
  • 데이터를 파일 계정으로 복사합니다.json, 이후 파일 끝에 빈 줄을 새로 만듭니다. 그렇지 않으면 오류 보고bulk request must be terminated by newline
  • 색인 만들기
  • PUT /bank?pretty
    {
      "settings": {
        "number_of_shards": 2,
        "number_of_replicas": 0
      }
    }
    
  • ES 참고로 가져오기@는 반드시 있어야 합니다. 그렇지 않으면 오류가 발생합니다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 lanemill 으로 나누어 하나의 단어를 만들 수 있습니다. 조회하려면 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: 조회는 filtermill의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
    }
    

    좋은 웹페이지 즐겨찾기