Nested Query
- document에서 list의 object가 있는 구조
- 일반적인 DB에서의 1:N 구조를 하나의 document에 포함시키는 구조로 갈수가 있다.
Nested Mapping
PUT /my_index
{
"mappings": {
"type1" : {
"properties" : {
"obj1" : {
"type" : "nested"
}
}
}
}
}
- Type : nested
GET /_search
{
"query": {
"nested" : {
"path" : "obj1",
"score_mode" : "avg",
"query" : {
"bool" : {
"must" : [
{ "match" : {"obj1.name" : "blue"} },
{ "range" : {"obj1.count" : {"gt" : 5}} }
]
}
}
}
}
}
- Nested Query
- Nested Type에 있는 데이터에 대해 쿼리를 날릴수가 있다.
참고사항 : bool query
- 포함이 안되어 있는 경우의 쿼리 (not): must_not
- 반드시 포함이 되어 있는 경우(and) : must
- 하나라도 포함이 되어 있는 경우 (or) : should
주의사항
- nested 쿼리안에 must_not 쿼리는 제대로 작동이 되지 않을수가 있다. 데이터가 아닌 경우에는 hit가 된다.
"b" : [{
"a": 1
},
{
"a" : 2
}]
Nest Query
"nested" : {
"path" : "b",
"query":{
"must_not" : {
"match" : {
"a" : 1
}
}
}
}
# 위와 같은 쿼리에서는 a:1 인경우가 있으니 결과값이 나오지 않아야 되지만. 실제를 b:1가 매칭이 되서 결과값이 hit가 된다.
- nested 쿼리를 긍정문으로 작성을 한뒤 bool 쿼리를 이용하여 must_not으로 하는 식으로 처리를 하면 된다.
참고자료
- https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html
'Database > Elaticsearch' 카테고리의 다른 글
Elastic Search (0) | 2018.12.12 |
---|---|
Lucene Segment (0) | 2018.08.26 |
로그성 데이터의 날짜 기반의 index 설계 (0) | 2018.05.24 |
term aggregation 기능 사용하기 (0) | 2018.05.24 |
_source를 이용하여 원하는 필드만 선택하기 (0) | 2018.05.24 |