scala에서 elatic4s에서 복합 쿼리(compound query)를 실행하는 예제이다. 

should 다음에 바로 뒤에 query를 사용하면 문제가 생긴다.



쿼리가 하나 손실되는 예제


shoud {

 matchQuery

 rangeQuery

}




appendShould 예제를 잘 사용하는 것을 추천한다. 


search(searchData.serviceTag / DEFAULT_TYPE).
query {
bool {
must {
matchQuery("message", searchData.grep)
} appendMust {
rangeQuery("@timestamp").gte(searchData.startDateTime).lte(searchData.endDateTime)
}
}
}.size(searchData.size).sortByFieldDesc("@timestamp")


요청 json은 다음과 같다. 



 
   "query": 
      "bool": 
         "should": 
             
               "match": 
                  "message": 
                     "query":"*HTTP*"
                  }
               }
            },
             
               "range": 
                  "@timestamp": 
                     "gte":"2017-11-14T14:00:00+09:00",
                     "lte":"2017-11-14T15:00:00+09:00"
                  }
               }
            }
         ]
      }
   },
   "size":10,
   "sort": 
       
         "@timestamp": 
            "order":"desc"
         }
      }
   ]
}


이 두개의 짝을 잘 맞춰 개발할 필요가 있다. 

should->appendShould

must->mustShould

Posted by 김용환 '김용환'

댓글을 달아 주세요