The Closing Window
Encontrando significado en tus notas con CK Search image
Photo by Greg Rakozy on Unsplash

Encontrando significado en tus notas con CK Search

AI Insights

TL;DR

CK Search agrega búsqueda semántica local a cualquier directorio, con un servidor MCP integrado para integración con agentes de IA. La búsqueda semántica supera los límites de la búsqueda por palabras clave al encontrar notas basándose en significado, no en coincidencia de texto. Este post recorre la instalación increíblemente simple, la configuración, y explica cómo la búsqueda semántica encuentra lo que la búsqueda por palabras clave no puede. No es magia, y seré honesto sobre dónde falla.

Cuando la búsqueda no puede ver lo que quieres decir

En el primer post, describí el momento en que una buena organización aún no es suficiente. Puedes etiquetar perfectamente y aún así no encontrar lo que necesitas, porque estás buscando un concepto y tu nota usó palabras diferentes. Ese es el techo de la búsqueda por palabras clave.

Tengo alrededor de 1,900 archivos markdown en tres vaults de Obsidian. Si no eres usuario de Obsidian, puedes pensar en esto como 1,900 archivos de texto en tres carpetas diferentes. Están etiquetados, enlazados y estructurados con frontmatter, o dicho más simplemente, propiedades de página. La organización es sólida. Pero cuando busco "authentication," no encuentro mi nota sobre "session token management." Cuando busco "AI assistant," me pierdo la nota sobre "Claude Desktop." La información está ahí. La búsqueda simplemente no puede verla.

La búsqueda integrada de Obsidian, y la mayoría de los plugins que la extienden, funcionan con el mismo principio: hacer coincidir los caracteres que escribiste con los caracteres en tus archivos. Algunos agregan funciones para mejorar las coincidencias de palabras clave, pero siguen buscando solo texto, no significado.

La búsqueda semántica funciona diferente. En lugar de hacer coincidir cadenas de texto, convierte tanto tu consulta como tus notas en representaciones numéricas y mide qué tan cercanas están en significado. "Authentication" y "session token management" terminan cerca una de la otra en este espacio numérico, porque tratan del mismo concepto. La búsqueda entiende lo que quieres decir, no solo lo que escribiste.


Hay varias herramientas que pueden agregar búsqueda semántica a Obsidian. Evalué algunas antes de decidirme por CK Search. CK Search no es específico de Obsidian. Busca en cualquier directorio con archivos de texto.

Las dos cosas que más me importaban: CK Search funciona sin que Obsidian esté corriendo, y tiene un servidor MCP integrado. Lo primero significa que puedo buscar desde la línea de comandos, desde scripts, desde cualquier lugar. Lo segundo significa que Claude Code puede usarlo directamente como herramienta sin dependencias, configuración o setup adicional. También está construido en Rust, un lenguaje conocido por su velocidad.

Algo que debes saber de entrada: CK Search no tiene GUI. No hay un plugin de Obsidian con una barra de búsqueda. Es una herramienta de línea de comandos, y eso es por diseño — está construida para ser usada por agentes de IA y scripts, no para hacer clic manualmente. Si buscas una experiencia de búsqueda semántica de apuntar y hacer clic dentro de Obsidian, Smart Connections o Copilot podrían ser una mejor opción. Si estás construyendo un sistema donde un agente de IA consulta tus notas programáticamente, CK Search es la mejor herramienta.

Comparación de herramientas

CK Search Smart Connections Copilot for Obsidian
Tipo de búsqueda Semántica + híbrida Semántica Semántica
Soporte MCP Servidor integrado Plugin Ninguno
Multi-vault Cualquier directorio Por vault Por vault
Requiere Obsidian No
Local-first Varía

Instalación

CK Search se instala via Cargo, el gestor de paquetes de Rust. Si no tienes Rust, primero necesitas instalarlo.

# Install Rust (if you don't have it)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env

# Install CK Search
cargo install ck-search

# Verify
ck --version

Eso es todo. Sin runtime de Node.js, sin entorno de Python, sin contenedor de Docker. Un comando, una herramienta.


Tu primera búsqueda semántica

Antes de configurar cualquier otra cosa, pruébalo desde la línea de comandos:

# Semantic search — finds by meaning
ck --sem "ideas for improving workflow" /path/to/your/vault

La primera vez que ejecutas esto, CK Search construirá un índice. Lee cada archivo markdown en el directorio y almacena la representación numérica de ellos en una carpeta .ck/. Cada búsqueda después de esa es casi instantánea — solo re-indexa archivos que han cambiado. No hay proceso en segundo plano, ni daemon, ni watcher. CK Search solo se ejecuta cuando buscas. Cero consumo de recursos el resto del tiempo.

Prueba algunas consultas y compáralas con lo que devuelve la búsqueda integrada de Obsidian. Aquí es donde sentirás la diferencia. Busca un concepto que sabes que está en tus notas pero usando palabras diferentes a las que escribiste. La búsqueda semántica lo encontrará. La búsqueda por palabras clave no.

CK Search también soporta búsqueda por palabras clave y modo híbrido (semántica + palabras clave combinadas), pero yo lo uso principalmente para búsqueda semántica. Mi stack ya tiene herramientas de búsqueda por palabras clave cubiertas: grep, la búsqueda integrada de Obsidian, el plugin Omnisearch. El valor único de CK Search es que entiende significados. Nada más en mi stack hace eso.


Conectándolo a un agente de IA

Si estás usando Claude Code o cualquier otro agente de IA, CK Search se vuelve dramáticamente más útil como servidor MCP. MCP (Model Context Protocol) es un estándar abierto para conectar herramientas de IA a fuentes de datos y capacidades externas. Claude Code lo soporta nativamente.

El enfoque más simple para configurar esto es un archivo .mcp.json:

{
  "mcpServers": {
    "ck-search": {
      "command": "/Users/yourname/.cargo/bin/ck",
      "args": ["--serve"]
    }
  }
}

Encuentra tu ruta real con which ck y reemplaza el command según corresponda.

Una vez conectado, Claude Code obtiene acceso a herramientas que incluyen:

  • semantic_search — la principal. Búsqueda conceptual, basada en significado.
  • hybrid_search — semántica + palabras clave combinadas.

En la práctica, cuando le hago una pregunta a Claude Code sobre mis notas, llama a semantic_search con una consulta en lenguaje natural, recibe resultados clasificados con rutas de archivo y fragmentos, y luego lee las mejores coincidencias para sintetizar una respuesta.


Qué indexar (y qué no)

CK Search indexa todo en el directorio al que lo apuntas, menos lo que excluyas. Quieres omitir cualquier cosa que no sea contenido de texto significativo. El principio clave: solo indexa archivos que contengan conocimiento que quieras buscar por significado. Archivos de configuración de apps y archivos multimedia no lo son. Son ruido que diluye el índice.

Para excluir archivos, crea un archivo .ckignore en la raíz del directorio que quieres buscar.

CK Search indexa archivos basados en texto como markdown, código y texto plano. Si tienes PDFs, imágenes con texto o documentos de Office, necesitarás una herramienta diferente para esos. Yo uso el plugin Omnisearch de Obsidian, que maneja PDFs mediante extracción de texto e imágenes mediante OCR. Pero ese es otro post.


Cuando la búsqueda semántica apesta

Quiero ser honesto sobre esto, porque demasiados posts sobre herramientas de IA exageran la magia.

La búsqueda semántica es mala para:

  • Cadenas exactas. ¿Buscando un mensaje de error, un nombre de función, un tag específico? Usa grep o la búsqueda integrada de Obsidian. La búsqueda semántica te dará resultados conceptualmente relacionados, que no es lo que quieres cuando necesitas el archivo exacto que contiene ERROR_CODE_4032.
  • Consultas cortas y comunes. Buscar "meeting" devolverá todo lo vagamente relacionado con reuniones. No es útil.
  • Desambiguación. "Apple" la empresa y "apple" la fruta son la misma representación numérica. El contexto ayuda, pero no es perfecto.
  • Consultas de frontmatter (propiedades de página). ¿Buscando notas con un tag o fecha específica? Esos son datos estructurados. Usa grep con una regex, no búsqueda semántica.
  • Contenido recién agregado. Si acabas de crear una nota, no estará en el índice hasta que la próxima búsqueda active una re-indexación de archivos modificados. Esto generalmente está bien, pero vale la pena saberlo.

La opinión honesta: la búsqueda semántica es una herramienta, no la única herramienta. Llena un vacío específico que la búsqueda por palabras clave no puede. Pero la búsqueda por palabras clave llena vacíos que la búsqueda semántica no puede. La mejor configuración usa ambas.


El panorama completo

CK Search es una pieza de un sistema de búsqueda más grande que he construido para mi base de conocimiento.

El stack completo, brevemente:

  • CK Search: Búsqueda semántica sobre archivos markdown (lo que cubre este post)
  • Grep: Coincidencia exacta de texto y regex (integrado, cero configuración)
  • Omnisearch: Búsqueda por palabras clave en todos los tipos de archivo incluyendo PDFs e imágenes con OCR
  • Sift: Un sistema personalizado de RAG y grafo de conocimiento temporal para una base de conocimiento externa pero relacionada (separada de Obsidian)

Cuando mi agente de IA maneja una consulta de búsqueda, ejecuta todos estos en paralelo y sintetiza los resultados combinados. Pero eso es para un post posterior. Por ahora, CK Search por sí solo es una mejora significativa sobre la búsqueda solo por palabras clave.


Lo que sigue

El próximo post cubre cómo construí una base de conocimiento externa usando Sift, un sistema open-source que combina búsqueda vectorial, RAG y un grafo de conocimiento temporal para ir más allá de lo que cualquier herramienta de búsqueda de un solo vault puede hacer. Tu conocimiento no vive todo en archivos markdown. Papers de investigación, artículos web, videos de YouTube, podcasts, documentos de referencia — las cosas que has recolectado fuera de tu vault — necesitan un hogar también. Y una vez que lo tienen, puedes empezar a hacer preguntas a través de todo eso y obtener respuestas con fuentes.


Este post es parte de la Serie de gestión del conocimiento potenciada por IA. Anterior: De carpetas a base de conocimiento. Siguiente: Más allá de Obsidian — Construyendo una base de conocimiento externa con Sift.

Powered by Buttondown.