Ir al contenido

Búsqueda

Engram indexa el contenido de las notas para la búsqueda semántica, que encuentra notas con un significado parecido al de tu consulta, aunque la redacción sea distinta. También admite la búsqueda de coincidencia exacta, pero dónde se ejecuta depende del alcance.

  • Búsqueda semántica en toda la bóveda. Similitud vectorial sobre los embeddings de cada nota. Encuentra ideas relacionadas, no solo texto literal. Es lo que se ejecuta hoy desde el panel de búsqueda de la aplicación web.
  • Búsqueda por palabras clave e híbrida. El backend también indexa las notas para una búsqueda por palabras clave (léxica) segura con el cifrado y para un modo híbrido que fusiona resultados léxicos y vectoriales (ver más abajo). Esto ya está en el backend; el panel de búsqueda de la aplicación web aún no expone un selector de modo, así que por ahora lanza consultas semánticas.
  • Coincidencia exacta dentro de una nota abierta. Ctrl/Cmd+F y Buscar/Reemplazar del editor funcionan sobre la nota descifrada en tu sesión actual, igual que en cualquier editor de texto.

Engram admite la búsqueda por palabras clave (léxica) en toda tu bóveda, y lo hace sin romper el cifrado en reposo. En lugar de analizar texto plano, el backend indexa un vector disperso por fragmento con clave HMAC(your vault key, token), de modo que el servidor puede comparar los términos de la consulta con el índice sin llegar a tener texto legible de las notas. Los modos por palabras clave, semántico (vectorial) e híbrido (léxico + vectorial combinados en el servidor mediante reciprocal-rank fusion) están todos activos en el backend.

Esto significa que la búsqueda real de subcadenas o con expresiones regulares sobre el texto sin procesar sigue sin ser posible en el servidor (el índice es de tokens, no de caracteres). Por eso, para búsquedas literales con expresiones regulares, con distinción de mayúsculas y minúsculas o filtradas por ruta, la herramienta sigue siendo el panel de búsqueda local de Obsidian (que opera sobre tus archivos .md en disco). Ctrl/Cmd+F del editor también sirve para buscar dentro de una nota abierta.

La búsqueda de Engram y la de Obsidian se complementan: semántica, por palabras clave e híbrida en la nube; búsqueda literal completa con regex, sensible a mayúsculas y filtrada por ruta en disco. El panel de búsqueda local de Obsidian funciona sobre la misma bóveda que Engram está sincronizando.

  • Panel de búsqueda de la aplicación web (la barra de búsqueda): consultas semánticas hoy
  • El plugin de Obsidian ejecuta la búsqueda contra el mismo backend que la aplicación web
  • El panel Search de Obsidian para búsquedas literales locales con regex, sensibles a mayúsculas y por ruta sobre la bóveda en disco

Para un patrón regex o una coincidencia literal acotada por ruta, usa la búsqueda local de Obsidian.

  1. Tu consulta se convierte en embedding (el modelo de consultas es asimétrico respecto al modelo de documentos, ajustado para la recuperación y no para la indexación)
  2. Qdrant devuelve las K mejores coincidencias vectoriales con cuantización binaria + reevaluación
  3. Si hay un reranker configurado (RERANKER_BACKEND=jina + JINA_URL en el backend), los candidatos se reordenan con una mezcla 40/60 de puntuaciones vectoriales y del reranker; si no, se usa el ranking vectorial en bruto

El despliegue en la nube por defecto funciona hoy sin reranker; el adaptador de Jina está publicado y listo para activarse.

Restringir la búsqueda a una carpeta es posible mediante la API. Pasa un parámetro de consulta folder=<path>. Una sintaxis de consulta en el cuadro de búsqueda como folder:work/ está en la hoja de ruta, pero aún no está conectada a la interfaz.

  • La bóveda es muy pequeña (< 20 notas). Hay menos embeddings con los que comparar; los resultados tienden a ser ruidosos hasta que tu bóveda crece
  • Notas recién importadas. El embedding se ejecuta de forma asíncrona mediante Oban; las notas recién escritas pueden tardar unos segundos en aparecer en los resultados
  • Jerga muy específica. La similitud semántica funciona mejor con conceptos. Para identificadores exactos (el nombre de una función, un código de error), la búsqueda por palabras clave e híbrida (léxica + vectorial) es más adecuada. Ambas están activas en el backend, y falta exponerlas en la interfaz de la aplicación web. Mientras tanto, la búsqueda local de Obsidian cubre los identificadores exactos.