결과 내 재검색 이라는 기능을 새로 구현해야됐다. 처음에는 검색하지 않고, DB를 거치고 해야되나? 근데 그럼 aggregation,paging, sorting은 어떻게..? 이게 괜찮은건가..? 별의별 생각을 해봤는데 문득 이런 기능 가진 서비스가 많은데? 라는 생각에 그냥 “결과 내 재검색 elastic” 이라는 키워드로 검색했다. 그랬더니 바로 나옴..!!! 그게 바로 post_filter 였다.
필터로 한번 검색된 결과 중에 post_filter 에 정의한 조건에 맞는 결과를 찾아주는 기능이다. 말그대로 결과 내 재검색이다.
(개인적으로 테스트 해본거라 틀릴수도 있습니다. 틀린게 있다면 댓글 달아주세요!!)
이런저런 테스트 끝에, 아래와 같은 쿼리문을 도출해냈다.
{
"query": {
"bool": {
"must": [
{
"match": {
"조건1-1": "하이"
}
}
],
"filter": {
"bool": {
"must": [
{
"term": {
"조건2": true
}
}
]
}
}
}
},
"from": 0,
"size": 10,
"sort": {
"조건3": "asc"
},
"post_filter": {
"query_string": {
"query": "(*원피스\\!*) AND (*레드*)",
"fields": [
"조건1-2.keyword"
]
}
}
}
cc. https://steady-snail.tistory.com/121 ,
https://www.elastic.co/guide/en/elasticsearch/reference/current/filter-search-results.html#post-filter