키워드 검색
키워드 검색 (Keyword Search · BM25)
"정확한 단어가 그대로 들어있는" 문서를 찾아야 할 때가 있어요. 도메인 용어나 태그, 카테고리처럼 철자가 중요할 때가 대표적인 경우죠. 이럴 때 쓰는 게 키워드(어휘) 검색이고, Weaviate는 정확 일치 기반 검색을 위해 BM25 알고리즘을 사용해요. 벡터 검색이 "의미가 비슷한" 결과를 찾는다면, 키워드 검색은 "정확한 토큰이 일치하는" 결과를 찾는 검색이라고 정리할 수 있어요.
BM25가 점수를 매기는 방식
키워드 검색은 "토큰(token)"이라고 부르는 문자열 조각의 일치를 바탕으로 검색해요. BM25 알고리즘은 문서에서 질의어가 몇 번 나왔는지(term frequency)와, 그 용어가 데이터셋 전체에서 얼마나 흔한지(inverse document frequency)를 조합해 관련성 점수를 계산해요.
여기서 Weaviate는 BM25F 알고리즘을 쓴다는 점을 짚어둘게요. "F"는 field를 뜻하는데, 인덱스에서 여러 필드(프로퍼티)를 동시에 지원하도록 BM25를 확장한 버전이에요. 각 필드에 서로 다른 가중치를 줄 수 있다는 뜻이죠. 다만 Weaviate에서는 이 둘을 같은 의미로 섞어 쓰기 때문에, 보통은 그냥 BM25라고 부른다는 점만 알아두면 돼요.
정확 일치가 중요한 검색, 예를 들어 특정 기술 용어가 들어간 문서나 정밀한 키워드·태그로 문서를 찾는 경우에 키워드 검색이 잘 맞아요. 반대로 단어는 안 맞아도 의미가 비슷한 내용을 찾고 싶다면 벡터 검색이 낫겠죠.
토큰화 (Tokenization)
키워드 검색에서 토큰화는 원문을 어떻게 "토큰" 단위로 쪼개서 비교·매칭할지 정하는 설정이에요. 기본 토큰화 방법은 word이에요.
이 외에도 whitespace, lowercase, field 같은 방법이 있고, 다른 언어 전용으로는 gse(중국어·일본어)나 kagome_kr(한국어) 같은 토크나이저도 제공돼요. 토큰화 옵션은 컬렉션의 역인덱스 구성에서 설정해요.
불용어 (Stopwords)
불용어는 텍스트를 처리하기 전에 걸러내는 단어들이에요. Weaviate는 설정 가능한 불용어 목록을 사용해서 BM25 점수를 계산해요. 불용어 목록에 들어 있는 토큰은 BM25 점수 계산에서 무시돼요.
키워드 검색 연산자
기본 연산자는 or이고, minimumOrTokensMatch는 1이에요. 다시 말해 검색되는 프로퍼티에 토큰이 하나 이상 있어야 그 객체가 결과로 반환된다는 뜻이에요. 연산자별 사용법은 전용 how-to 페이지에서 더 자세히 볼 수 있어요.
검색 대상 프로퍼티 (Selected properties)
BM25 질의는 점수 계산에 포함할 프로퍼티를 선택할 수 있어요. 기본적으로 모든 text 프로퍼티가 BM25 계산에 포함돼요. 두 가지 방법으로 조정할 수 있어요.
- 컬렉션 구성에서 프로퍼티의
indexSearchable을false로 설정 → 이 프로퍼티는 모든 BM25 검색에서 제외돼요. - 질의 시점에 검색할 프로퍼티를 직접 지정 → 그 질의에만 적용돼요.
벡터 검색과 결합 (Hybrid)
키워드 검색은 벡터 검색과 결합해서 하이브리드 검색으로 쓸 수 있어요. 이렇게 하면 키워드 검색의 정확 일치 능력과 벡터 검색의 의미 이해 능력을 동시에 활용할 수 있어요. 자세한 내용은 하이브리드 검색 문서를 참고하세요.
참고와 모범 사례
- 토큰화 선택: 데이터와 검색 요구에 맞게 골라요. 자연어 텍스트에는
word가 좋고, URL이나 이메일 주소처럼 통째로 정확히 일치해야 하는 값에는field를 고려해요. - 다국어 콘텐츠: 중국어·일본어에는
gse, 한국어에는kagome_kr같은 전용 토크나이저를 고려해요. - 특수 문자와 대소문자 구분 요구 사항도 같이 점검해요.