2 minute read

ElasticSearch의 Read 기능은 색인된 데이터를 검색하고 조회하는 과정입니다. Read 작업은 HTTP GET 요청을 통해 이루어지며, 특정 문서를 조회하거나 다양한 조건을 바탕으로 검색을 수행할 수 있습니다.

1. 특정 문서 조회

특정 문서를 조회하려면 GET 요청을 사용하여 색인에서 문서의 ID를 기반으로 검색할 수 있습니다. 이 방법은 데이터베이스에서 기본 키를 사용해 레코드를 검색하는 것과 유사합니다.

# 예제

GET /my_index/_doc/1

이 요청은 my_index 색인에서 ID가 1인 문서를 검색합니다.

# 응답

{
  "_index": "my_index",
  "_id": "1",
  "_version": 1,
  "_seq_no": 0,
  "_primary_term": 1,
  "found": true,
  "_source": {
    "user": "홍길동",
    "message": "아이디 1번이 지정된 문서입니다."
  }
}

응답에는 문서의 내용을 포함하여 해당 문서가 속한 색인(_index), 문서 ID(_id), 그리고 문서의 소스 데이터(_source)가 포함됩니다. 만약 문서를 찾지 못하면 found 필드가 false로 반환됩니다.

2. 여러 문서 조회

ElasticSearch에서 여러 문서를 조회하려면 GET 요청과 함께 _search 엔드포인트를 사용합니다. 이를 통해 특정 조건에 맞는 문서를 검색할 수 있습니다.

2.1 기본적인 검색

아래 예제는 my_index 색인에서 user 필드에 “홍길동”이 포함된 문서를 검색하는 예제입니다.

# 예제

GET /my_index/_search
{
  "query": {
    "match": {
      "user": "홍길동"
    }
  }
}

이 요청은 my_index 색인에서 user 필드에 “홍길동” 이라는 단어가 포함된 문서를 검색합니다.

# 응답

{
  "took": 5,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 0.6931472,
    "hits": [
      {
        "_index": "my_index",
        "_id": "1",
        "_score": 0.6931472,
        "_source": {
          "user": "홍길동",
          "message": "아이디 1번이 지정된 문서입니다."
        }
      }
    ]
  }
}

응답에서는 검색된 문서의 리스트가 hits 필드에 포함되어 반환됩니다. 이 필드 내의 _source 부분에서 문서의 내용을 확인할 수 있습니다.

2.2 조건을 사용한 검색

여러 조건을 조합하여 문서를 검색할 수도 있습니다. 예를 들어, 아래 예제는 message 필드에 “환영합니다” 라는 텍스트가 포함된 문서를 검색하는 쿼리입니다.

# 예제

GET /my_index/_search
{
  "query": {
    "match": {
      "message": "환영합니다"
    }
  }
}

이 요청은 my_index 색인에서 message 필드에 “환영합니다” 라는 단어가 포함된 모든 문서를 검색합니다.

# 응답

{
  "took": 5,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1.0,
    "hits": [
      {
        "_index": "my_index",
        "_id": "1",
        "_score": 1.0,
        "_source": {
          "user": "홍길동",
          "message": "홍길동님 환영합니다!"
        }
      }
    ]
  }
}

이 응답에서 hits 필드에 검색된 문서가 포함되며, 조건에 맞는 문서의 내용을 _source 필드에서 확인할 수 있습니다.

3. 전체 문서 조회

색인에 저장된 모든 문서를 조회하려면 _search 엔드포인트를 사용하며, 쿼리 없이 요청을 보냅니다.

# 예제

GET /my_index/_search
{
  "query": {
    "match_all": {}
  }
}

이 요청은 my_index 색인에 저장된 모든 문서를 반환합니다.

# 응답

{
  "took": 3,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 2,
      "relation": "eq"
    },
    "max_score": 1.0,
    "hits": [
      {
        "_index": "my_index",
        "_id": "1",
        "_score": 1.0,
        "_source": {
          "user": "홍길동",
          "message": "홍길동님 환영합니다!"
        }
      },
      {
        "_index": "my_index",
        "_id": "2",
        "_score": 1.0,
        "_source": {
          "user": "김철수",
          "message": "안녕하세요, 김철수입니다."
        }
      }
    ]
  }
}

이 응답에서는 my_index 색인에 저장된 모든 문서가 hits 필드에 리스트로 반환됩니다.

Categories:

Updated:

Leave a comment