콘텐츠로 이동

검색

Engram은 노트 내용을 시맨틱 검색용으로 색인합니다. 표현이 달라도 질의와 비슷한 의미를 가진 노트를 찾아 줍니다. 정확 일치 검색도 지원하지만, 어디서 실행되는지는 범위에 따라 다릅니다.

  • 보관함 전체에 대한 시맨틱 검색. 모든 노트의 임베딩에 대한 벡터 유사도 검색입니다. 글자 그대로의 텍스트뿐 아니라 관련된 생각을 찾습니다. 현재 웹 앱의 검색 패널에서 실행되는 것이 이것입니다.
  • 키워드 및 하이브리드 검색. 백엔드는 암호화에 안전한 키워드(어휘) 검색과, 어휘 결과와 벡터 결과를 합치는 하이브리드 모드(아래 참고)용으로도 노트를 색인합니다. 이는 백엔드에서 제공되며, 웹 앱의 검색 패널에는 아직 모드 전환이 없어 지금은 시맨틱 질의를 보냅니다.
  • 열린 노트 안의 정확 일치. Ctrl/Cmd+F와 에디터의 찾기/바꾸기는 일반 텍스트 에디터처럼 현재 세션에서 복호화된 노트에 대해 작동합니다.

문자 그대로 / 정규식 검색은요?

섹션 제목: “문자 그대로 / 정규식 검색은요?”

Engram은 보관함 전체에 대한 키워드(어휘) 검색을 지원하며, 저장 시 암호화를 깨뜨리지 않고 이를 수행합니다. 평문을 훑는 대신, 백엔드는 청크마다 HMAC(your vault key, token)을 키로 하는 희소 벡터를 색인합니다. 그래서 서버는 읽을 수 있는 노트 텍스트를 한 번도 갖지 않은 채 검색어를 색인과 대조할 수 있습니다. 키워드 검색, 의미(벡터) 검색, 그리고 어휘 검색과 벡터 검색을 서버에서 역순위 결합(reciprocal-rank fusion)으로 합치는 하이브리드 검색이 모두 백엔드에서 지원됩니다.

다만 색인은 문자가 아니라 토큰 단위이므로, 원문 텍스트에 대한 진짜 부분 문자열/정규식 검색은 여전히 서버에서 할 수 없습니다. 정규식, 대소문자 구분, 경로 필터가 필요한 리터럴 검색에는 디스크의 .md 파일을 대상으로 동작하는 Obsidian의 로컬 검색 창을 쓰세요. 열려 있는 노트 안에서 찾을 때는 편집기의 Ctrl/Cmd+F도 사용할 수 있습니다.

Engram과 Obsidian 검색은 서로 보완적입니다. 클라우드에서는 시맨틱, 키워드, 하이브리드, 디스크에서는 전체 정규식 / 대소문자 구분 / 경로 필터 문자 그대로 검색입니다. Obsidian의 로컬 검색 패널은 Engram이 동기화하는 바로 그 보관함에 대해 실행됩니다.

  • 웹 앱 검색 패널(검색 레일): 현재는 시맨틱 질의
  • Obsidian 플러그인은 웹 앱과 같은 백엔드에 대해 검색을 실행합니다
  • Obsidian 검색 패널: 디스크에 있는 보관함에 대한 로컬 정규식 / 대소문자 구분 / 경로 문자 그대로 검색

정규식 패턴이나 경로로 범위를 좁힌 문자 그대로 검색은 Obsidian의 로컬 검색을 이용하세요.

  1. 질의가 임베딩됩니다(질의 모델은 문서 모델과 비대칭이며, 색인이 아니라 검색에 맞춰 조정되어 있습니다)
  2. Qdrant가 이진 양자화 + 재점수화로 상위 K개의 벡터 일치 항목을 반환합니다
  3. 리랭커가 설정되어 있으면(백엔드의 RERANKER_BACKEND=jina + JINA_URL) 후보가 벡터 점수와 리랭커 점수를 40/60으로 섞어 재정렬됩니다. 설정되어 있지 않으면 원래의 벡터 순위를 씁니다

기본 클라우드 배포는 현재 리랭커 없이 실행됩니다. Jina 어댑터는 출시되어 있어 켤 수 있는 상태입니다.

폴더로 검색을 제한하는 것은 API를 통해 지원됩니다. folder=<path> 쿼리 매개변수를 넘기세요. folder:work/ 같은 검색창 질의 구문은 로드맵에 있으며 UI에는 아직 연결되지 않았습니다.

시맨틱 검색이 기대에 못 미칠 때

섹션 제목: “시맨틱 검색이 기대에 못 미칠 때”
  • 보관함이 매우 작을 때(노트 20개 미만). 비교할 임베딩이 적어서 보관함이 커지기 전까지는 결과가 다소 잡음이 많습니다
  • 방금 가져온 노트. 임베딩은 Oban을 통해 비동기로 실행되므로, 새로 쓴 노트가 결과에 나타나기까지 몇 초가 걸릴 수 있습니다
  • 매우 특수한 전문 용어. 시맨틱 유사도는 개념에 가장 적합합니다. 정확한 식별자(함수 이름, 오류 코드)에는 키워드와 하이브리드(어휘 + 벡터) 검색이 더 적합합니다. 둘 다 백엔드에서는 사용할 수 있고, 웹 앱 UI 노출은 아직 남아 있습니다. 그동안은 Obsidian의 로컬 검색으로 정확한 식별자를 찾을 수 있습니다.