[Elastic Search] 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
필드에 리스트로 반환됩니다.
Leave a comment