elasticsearch 를 하면서, 특정 필드들만 추출해야하는 경우가 있었다. RDB에서 사용하던
select
같은 애가 필요했다. 찾아보니fields
라는 옵션이 있었다. 오늘은fields
쿼리에 대해 정리해보고자 한다.
검색 응답에서 특정 필드를 검색하기 위한 옵션.
_source
안에서 값을 찾고, 매핑을 사용하여 구문을 분석하고 포멧형식을 정한다. 여기서 주의할 점은 fields
옵션으로 검색 결과 후 모든 필드들의 값들이 항상 array형태로 온다는 것이다. 또한 특정 순서대로 오는 것을 보장하지 못한다.
[검색]
POST my-index/_search
{
"query": {
"match": {
"user.id": "kimchy"
}
},
"fields": [
"user.id",
"http.response.*", // wildcard 를 사용하여 특정 단어가 들어간 필드를 지정하여 노출시킬 수 있다.
{
"field": "@timestamp",
"format": "epoch_millis" // 특정 필드 값의 포멧을 지정하여 노출시킬 수 있다.
}
],
"_source": false
}
[검색 결과]
{
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "my-index-000001",
"_id" : "0",
"_score" : 1.0,
"_type" : "_doc",
"fields" : {
"user.id" : [
"kimchy"
],
"@timestamp" : [
"4098435132000"
],
"http.response.bytes": [
1070000
],
"http.response.status_code": [
200
]
}
}
]
}
}