현재 옵시디언 노트를 위한 시맨틱 검색 플러그인을 개발하고 있습니다.
제가 검색 옵시디언 플러그인을 개발하기 시작한 이유는 바로 옵시디언의 기본 검색 기능과 Omnisearch 플러그인의 검색에 한계를 느꼈기 때문입니다. 사실, 제가 노트 정리를 잘 못하는 것도 노트 검색이 어려운 주요 원인 중 하나입니다.
기본 검색은 단순 키워드 매칭에 의존해, 사용자가 찾고자 하는 문서와 연관성이 높은 결과를 제공하는 데 한계가 있습니다. 이를 극복하기 위해 하이브리드 검색을 도입함으로써 검색 품질을 높이고, 사용자가 더 풍부한 정보를 쉽게 찾을 수 있는 환경을 제공하고자 합니다.
개발자로서 우리는 항상 성능과 사용자 경험을 최적화하려는 도전에 직면합니다.
하이브리드 검색 기능 구현하기
플러그인에 하이브리드 검색 기능을 추가하기 위해 파인콘DB의 하이브리드 검색 가이드를 참고하여 JavaScript에서 구현해보려고 했지만, 관련 지식이 부족하여 개발이 쉽지 않았습니다.
파이썬은 pinecone-text
패키지를 제공하여 Sparse vectors를 계산하는 것이 수월했지만,JavaScript에서는 해당 패키지를 제공하고 있지 않아서 직접 구현해야 합니다. 이를 해결하기 위해 pinecone-ts-client 리포지토리에서 해당 이슈의 스레드 댓글을 참고하여 JS에서 sparse vectors를 계산하는 방법을 시도했지만 이것도 쉽지는 않았습니다.
이러한 문제를 해결하기 위해 대안으로 Omnisearch 플러그인의 API를 연동해보기로 했습니다. Omnisearch 플러그인은 내부적으로 뛰어난 MiniSearch
라이브러리를 사용하고 있으며, 이는 BM25 알고리즘을 지원합니다. 덕분에 간편한 API 호출만으로도 강력한 검색 기능을 구현할 수 있습니다.
Omnisearch API 연동하기
Omnisearch API는 외부에서도 간단히 검색 기능을 사용할 수 있도록 설계되어 있습니다.
예를 들어, 다음과 같은 코드로 검색 쿼리를 전달할 수 있습니다.
const results = await omnisearch.search('your query')
간단한 코드 한 줄 만으로 Omnisearch 플러그인의 강력한 검색 기능을 정말 쉽게 활용할 수 있었습니다.
'개발 > 개발 로그' 카테고리의 다른 글
옵시디언 Omnisearch를 Claude 데스크탑에서 활용: MCP 서버 개발 기록 (4) | 2024.12.02 |
---|---|
옵시디언 노트 시맨틱 검색 플러그인: 1차 개발 완료 (2) | 2024.11.22 |
옵시디언 RAG 플러그인 임베딩 시점 조사하기 (0) | 2024.11.20 |
옵시디언 Omnisearch 플러그인 검색 성능 비교 (2) | 2024.11.17 |
옵시디언 플러그인 개발에 Windsurf IDE 활용하기 (4) | 2024.11.16 |