[elasticsearch] 필드 존재 여부 확인하기
elasticsearch는 schema-less 아키텍처라 특정 필드가 존재하는지 확인할 필요가 있다.
그 때는 exists 필터를 사용할 수 있다. 아래와 같이 요청하면 전체 다큐먼트 중, url 필드가 존재하는 다큐먼트를 검색한다.
curl -XPOST 'http://127.0.0.1:9200/blog/comment/_search?pretty=true' -d '{
"query": {
"filtered": {
"filter": {
"exists": {
"field":"url"
}
},
"query": {
"match_all": {}
}
}
}
}'
exists 필터와 반대로 없는 것만 얻고 싶으면 missing 필터를 사용한다.
curl -XPOST 'http://127.0.0.1:9200/blog/comment/_search?pretty=true' -d '{
"query": {
"filtered": {
"filter": {
"missing": {
"field":"url"
}
},
"query": {
"match_all": {}
}
}
}
}'
exists와 missing 필터는 확인할 필드 이름으로 field 매개변수만을 받는다.
만약 임베디드 객체 또는 임베디드 객체의 목록을 사용하고 있다면, 하위 객체 필드를 같이 사용할 수 있다.