Typesense 패싯과 필터링

Typesense 패싯과 필터링

패싯(faceting)은 검색 결과를 특정 필드 값별로 묶어 개수를 보여 주는 기능이에요. 쇼핑몰에서 "카테고리", "가격대", "브랜드"처럼 옆에 나오는 필터 목록이 바로 패싯이에요. Typesense는 facet_by 파라미터로 이를 간단하게 처리해요.

출처: https://typesense.org/docs/0.25.1/guides/faceting.html

패싯 전제 조건

패싯으로 쓰려면 해당 필드가 컬렉션 스키마에서 facet: true로 정의돼 있어야 해요. 그래야 인덱싱할 때 패싯 집계용 구조가 함께 만들어져요.

{"name": "country", "type": "string", "facet": true}

패싯 검색

facet_by에 패싯할 필드를 지정하면, 응답의 facet_counts에 값별 개수가 담겨요.

curl 'http://localhost:8108/collections/companies/documents/search?q=coffee&query_by=company_name&facet_by=country'

응답의 facet_counts 배열에는 필드명, 값 배열(각 값과 그 개수)이 들어 있어요. 여러 필드를 쉼표로 구분해 동시에 패싯할 수도 있어요.

패싯과 필터 조합

패싯으로 보여 준 값으로 실제 결과를 좁힐 때는 filter_by를 함께 써요.

curl 'http://localhost:8108/collections/companies/documents/search?q=coffee&query_by=company_name&facet_by=country&filter_by=country:=USA'

리스트 필드의 패싯, 범위 패싯, 사용자 정의 패싯 개수(max_facet_values) 같은 옵션도 있어서 상황에 맞게 조절할 수 있어요.

필터 연산자

filter_by는 여러 조건 연산자를 지원해요. 예를 들어 숫자 범위(:>), 부등식, IN 조건, NOT 조건 등을 조합할 수 있어요.

curl 'http://localhost:8108/collections/companies/documents/search?q=coffee&query_by=company_name&filter_by=num_employees:>100&&country:=[USA,Canada]'

그리고 여러 필터를 &&로 연결하면 AND, ||로 연결하면 OR 조건이 돼요.

더 알아보기