Meilisearch 필터 가이드: 개발자 위한 실전 가이드
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 웹 애플리케이션 개발자, 검색 기능 구현이 필요한 프론트엔드/백엔드 개발자
- 중간~고급 수준의 Meilisearch 활용 경험이 있는 개발자
핵심 요약
- 필터 설정 필수:
filterable attributes
를 미리 정의해야 필터가 작동 (예:genre
,release_year
,rating
) - 필터 구문 규칙:
attribute operator value
형식, 공백 필수 (예:genre = action
,release_year > 2010
) - 복합 조건 처리:
AND
,OR
연산자로 조건 결합 (예:['genre = action OR genre = sci-fi', 'release_year > 2010']
) - 형식 오류 주의: 숫자 필터는 따옴표 사용 금지 (
rating > 7.5
,is_available = true
)
섹션별 세부 요약
1. 필터 설정 방법
filterable attributes
를 인덱스 설정에서 정의해야 필터 가능- JavaScript 클라이언트 예시:
```javascript
await client.index('movies').updateFilterableAttributes(['genre', 'release_year', 'rating'])
```
- 대규모 데이터셋일 경우 초기 설정이 필수 (재인덱싱 시간 소요)
2. 필터 구문 규칙
- 지원 연산자:
=
,!=
,>
,>=
,<
,<=
,EXISTS
- 예시:
```javascript
filter: 'genre = action' // 동작: 장르가 "action"인 영화 검색
```
- 데이터 타입 일치 필수 (예:
release_year
은 숫자,genre
은 문자열)
3. 복합 조건 처리
AND
,OR
연산자로 조건 결합- 배열 사용 예시:
```javascript
filter: ['genre = action OR genre = sci-fi', 'release_year > 2010']
```
- 배열 내 조건은
AND
로 묶임, 문자열 내 조건은OR
로 결합
4. 수치/불리언 필터
- 예시:
```javascript
filter: ['rating > 7.5', 'is_available = true']
```
- 숫자 필터는 따옴표 사용 금지, 불리언은
true
/false
사용
5. Facets 활용
- 사용자 인터랙션을 위한 동적 필터 UI 생성
- 예시:
```javascript
facets: ['genre'], filter: 'genre = drama'
```
- 결과:
genre
별 문서 수 계산 (예:{ genre: { action: 50, drama: 30, ... } }
)
6. 일반적인 문제와 해결책
| 문제 | 원인 | 해결 방법 |
|------|------|-----------|
| 결과 없음 | 필터 가능한 속성 미설정 | filterable attributes
정의 |
| 필터 무시 | 구문 오류 | attribute = value
형식, 공백 포함 |
| 성능 저하 | 조건 복잡도 높음 | 조건 최소화, 인덱스 최적화 |
7. 실전 예제: 영화 검색 앱
- Node.js Express 예시:
```javascript
app.post('/search', async (req, res) => {
const { query, genre, year } = req.body
const filters = []
if (genre) filters.push(genre = ${genre}
)
if (year) filters.push(release_year = ${year}
)
const response = await client.index('movies').search(query || '', { filter: filters })
res.send(...
)
})
```
- 기능: 사용자 입력을 기반으로 동적으로 필터 적용
결론
- 필터 설정 초기 계획:
filterable attributes
를 미리 정의하여 재인덱싱 시간 절약 - 작은 데이터셋 테스트: 필터 구문 오류 사전 확인
- 성능 최적화: 복잡한 필터 조건은 최소화, 페이지네이션 적용
- 확장성 고려: Facets로 동적 UI 구현, Meilisearch 로그로 성능 모니터링
- 문서에서 제공하는 Advanced Features 참조: 정렬, 오타 내성 등 활용 권장