이 내용에 관해 자세히 정리한 것이 없는 것 같아서 다시 정리하기로 결심했다! 또 이제와서 다시 보니 새삼 중요한 부분이라 생각한다.
현재 검색할 때 bool>should>filter>must(>terms, >term, >nested 등) 또는 bool>should>must(>match) 를 사용하고 있다. 검색 키워드가 text타입일 경우, bool>should>must 로 사용하고 있고 다른 타입일 경우에는 bool>should>filter>must 로 사용하고 있다. 왜 이렇게 하기로 했더라..? 라는 생각을 더듬어서 가보니 생각보다 중요한 내용인듯 하다. (bool>should는 다음에 다루도록 하겠다.)
score 계산 여부
일단 둘의 차이는 많은 분들이 아시다싶이 score 로 계산을 하느냐 마느냐 차이이다. must는 score에 영향을 미치고, filter는 score에 영향을 미치지 않는다.
동작하는 context
must는 query context에서 동작하고, filter는 filter context 에서 동작한다. query context 는 이 문서가 쿼리에 있는 키워드와 얼마나 잘 일치하는지 를 의미하고, filter context 는 이 문서가 쿼리에 있는 키워드와 일치하는지 를 의미한다. 자세한 비교는 여기 를 참고하길!
cache 동작여부
1번과 이어지는 내용인데, must는 score 계산을 해야하기 때문에 cache를 사용하지 않는다. filter는 score 계산을 하지 않아도 되므로 cache를 사용한다.