elastic filter vs query

개발새발·2021년 10월 24일
0

elasticsearch

목록 보기
4/54

회사에서 elastic를 사용하게 되면서, 나는 elastic에 쿼리를 던져야하는 일이 많아졌다. laravel 과 함께 쓰면서 처음에는 생쿼리로 짜서 elastic에 요청을 보냈으나, laravel-scout 라는 패키지를 알게 되면서 이것과 함께 laravel-scout를 기반으로 하면서 elastic 검색을 편하게 해주는 https://github.com/babenkoivan/scout-elasticsearch-driver ← 이 패키지를 알게 되었다. 그래서 리팩토링을 진행했는데, 회사분이 어떤 full text query를 쓰고 있냐고 묻는 것이다. 그래서 까봤다.


*조건) 전역검색 : blue, 특정조건 : cdn_category=FEMALE, 소팅 : sale_count asc 기준, offset : 0, limit : 100


음 laravel eloquent에서 주로 사용하는 get()으로 데이터를 가져오고 싶은데 자꾸 no driver...라는 에러가 생겼다. ㅠㅠ 이건 아직도 해결을 못하는중...일단은 raw()로 사용하면 작동이 되서 해당 메소드로 데이터 가져오는중이다.
일단 진짜 자랑스러우면서 허탈한게... 내가 처음에 생으로 짜놓은 쿼리 코드랑 똑같다 ㅠㅠ 나 잘했다 증맬루.. full text query는 query_string을 사용하고 있고, 조건들은 filter context를 사용하고 있었다.
여기서 또 깊게 나가보니 filter와 query context 의 차이를 잘 알고있지 않은 것 같았다.
여기저기 찾아보니 아래처럼 정리가 되더라


Contexts

queryfilter
해당 문서가 다른 문서보다 적합함(관련성 체크)문서가 조건과 일치하거나 일치하지 않음
전체 텍스트 검색정확한 값 검색(특정필드 지정가능)
score* 존재score가 없음
X필터의 결과를 자동으로 캐시

*score : 관련성 점수


별거 없는 정리같지만 생각보다 저 특징들이 쿼리문을 어떤걸 써야될지에 대해 잡아주는 큰 방향 역할을 해줘서 큰 도움이 됐다. 관련성 점수 또는 전체 텍스트 검색이 필요하지 않는 한 항상 필터를 사용하는 것이 좋다고 한다.

profile
발새발개

0개의 댓글