{"schemaVersion":1,"id":"https://lucioduran.com/es/projects/vector-search-portability","url":"https://lucioduran.com/es/projects/vector-search-portability","title":"Vector Search Portability","description":"Comparación real de hnswlib y sqlite-vec con los mismos vectores, filtros y actualizaciones. Recall frente a búsqueda exacta, carga concurrente y pérdida por postfiltrado.","language":"es","datePublished":"2026-10-21","dateModified":"2026-10-21","contentFormat":"text/markdown","content":"[Proyectos](<https://lucioduran.com/es/projects>) / Vector Search Portability\n\n# Vector Search Portability\n\nComparación real de hnswlib y sqlite-vec con los mismos vectores, filtros y actualizaciones. Recall frente a búsqueda exacta, carga concurrente y pérdida por postfiltrado.\n\nAutor: [Lucio Durán](<https://lucioduran.com/es>) · Python 3.11.13 · Licencia: [MIT](<https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/LICENSE>)\n\nFicha publicada: 2026-10-21 · Ficha actualizada: 2026-10-21\n\n[Repositorio](<https://github.com/lucioduran/vector-search-portability>) · [Evidencia original](<https://raw.githubusercontent.com/lucioduran/vector-search-portability/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/results/reference/manifest.json>) · [Release v0.1.0](<https://github.com/lucioduran/vector-search-portability/releases/tag/v0.1.0>)\n\n## Problema y utilidad para agentes\n\nMigrar de motor puede conservar el número de resultados y cambiar cuáles son, cuánto cuestan los filtros o qué ocurre después de una actualización. El proyecto define un contrato común y mide esos desvíos.\n\nUn agente que recupera contexto filtrado depende tanto de la semántica del filtro como del ranking. Esta comparación permite inspeccionar IDs, distancias, predicados y pérdida de candidatos antes de atribuir un fallo al modelo.\n\n## Arquitectura\n\n1. **Entrada congelada.** 5.000 vectores float32 de 64 dimensiones, 40 consultas y 500 actualizaciones de vector y metadatos. El NPZ publicado fija los bytes de entrada.\n2. **Adaptadores nativos.** hnswlib 0.8.0 y sqlite-vec 0.1.6 comparten distancia L2 al cuadrado y filtros AND. Una búsqueda exhaustiva NumPy float64 actúa como referencia independiente.\n3. **Procesos y trazas.** Tres repeticiones aisladas por motor alternan el orden de ejecución. Se registran búsqueda nativa y postfiltrado, carga de uno y cuatro clientes, CPU, RSS y snapshots.\n\n- [Diseño y metodología](<https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/docs/methodology.md>)\n\n## Qué demuestra\n\n- Contratos comparables entre motores con métricas y semántica de filtros explícitas.\n- Evaluación de recall antes y después de cambios en vectores y metadatos.\n- Análisis de costos del adaptador y preservación de mediciones originales y de confirmación.\n\n## Resultados publicados\n\nResultados de referencia en Intel Xeon W-3223, macOS y Python 3.11.13. Las tablas de carga muestran medianas de tres ensayos, incluidos los percentiles de cada ensayo; no son percentiles agrupados.\n\nCada ensayo de carga realiza 400 búsquedas con filtros mezclados después de las actualizaciones. Recall@10 compara IDs con el top exacto. Pérdida de resultados mide cuántos faltan respecto de min(10, candidatos elegibles). El postfiltro parte de 40 vecinos globales.\n\n### Carga de lectura del informe original\n\n| Motor / clientes | Solicitudes/s | p50 (ms) | p95 (ms) |\n| --- | --- | --- | --- |\n| hnswlib / 1 | 1503.6 | 0.363 | 2.295 |\n| hnswlib / 4 | 100.3 | 9.402 | 149.332 |\n| sqlite-vec / 1 | 1412.7 | 0.666 | 0.801 |\n| sqlite-vec / 4 | 2637.5 | 1.476 | 1.660 |\n\n### Filtros después de actualizar, ambos motores\n\n| Modo | Recall@10 | Pérdida de resultados |\n| --- | --- | --- |\n| Nativo, grupos no vacíos | 1.0000 | 0.0000 |\n| Postfiltro por tenant | 0.4725 | 0.5275 |\n| Postfiltro selectivo | 0.0275 | 0.9725 |\n\nAmbos motores alcanzaron recall nativo 1,0 en esta muestra. El postfiltrado selectivo perdió el 97,25 % de los resultados disponibles aunque había 14 candidatos elegibles. Cuatro clientes degradaron el adaptador HNSW con predicado Python; el experimento no separa el costo del callback, el GIL y la máscara O(N).\n\nLa ejecución original conserva 9.600 búsquedas. Otra ejecución agrega 9.600 después de corregir la contabilidad de CPU, con la misma recuperación nativa y pérdida selectiva. Las cifras de la tabla siguen siendo las originales. [Resultados y análisis](<https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/results/README.md>).\n\n## Reproducir\n\nPython 3.11, compilador C++ para hnswlib y SQLite con extensiones cargables. setup.py prepara las dependencias locales. No requiere modelos, servidor ni API.\n\nLos comandos usan rutas POSIX. Algunos Python de macOS deshabilitan extensiones SQLite: el README documenta una instalación compatible. Conservá el NPZ fijado, elegí una salida nueva y evitá mediciones pesadas concurrentes.\n\n### Revisar la evidencia guardada\n\n```\ngit clone https://github.com/lucioduran/vector-search-portability.git\ncd vector-search-portability\ngit checkout 691a60ceecd4cb5eaaaf8570a073b80d96b9563e\npython3 scripts/setup.py\n.venv/bin/python -m vector_portability verify --output results/reference\n.venv/bin/python -m vector_portability verify --output results/confirmation\n```\n\n### Repetir la medición local\n\n```\nmkdir -p build\n.venv/bin/python -m vector_portability run --output build/reproduced\n.venv/bin/python -m vector_portability verify --output build/reproduced\n```\n\n## Alcance y límites\n\n- Los vectores son sintéticos: se evalúan geometría y adaptadores, no relevancia lingüística ni escala de producción.\n- Los motores tienen distinta durabilidad. La inserción de SQLite incluye commit; HNSW no garantiza persistencia ante caídas.\n- Carga local de circuito cerrado sin red. RSS incluye intérprete y trazas; tres repeticiones sobre un equipo no establecen un ganador general.\n\n- [Bases vectoriales: motores, filtros y decisiones de arquitectura](<https://lucioduran.com/es/blog/vector-databases-pgvector-qdrant-pinecone>)\n\n## Fuentes y revisión\n\nLas tablas resumen la ejecución de referencia del 21 de octubre de 2026. Los manifiestos enlazan los seis informes originales y los seis de confirmación con sus hashes. La revisión ejecutada indicada aquí corresponde a la referencia; el informe de confirmación identifica a416742cb7df20476b67c75dc4c13fe67c2d7ead.\n\n- Revisión consultada: [` 691a60ceecd4cb5eaaaf8570a073b80d96b9563e `](<https://github.com/lucioduran/vector-search-portability/commit/691a60ceecd4cb5eaaaf8570a073b80d96b9563e>)\n- Revisión registrada por el experimento: [` 7ee57a5af5e0f5bf4b46caf7eb55f0e1abd9fcf1 `](<https://github.com/lucioduran/vector-search-portability/commit/7ee57a5af5e0f5bf4b46caf7eb55f0e1abd9fcf1>)\n- Fecha del informe (UTC): 2026-10-21\n- Release publicada: [v0.1.0](<https://github.com/lucioduran/vector-search-portability/releases/tag/v0.1.0>) · 2026-10-21T22:16:31Z\n- SHA-256 del corpus: ` 53fd9ca277d581075d2eb7df63348fbd52e92d4a0797b1e40454367ed3d409e0 `\n\n- [README y uso](<https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/README.md>)\n- [Evidencia original](<https://raw.githubusercontent.com/lucioduran/vector-search-portability/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/results/reference/manifest.json>)\n- [Evidencia de confirmación](<https://raw.githubusercontent.com/lucioduran/vector-search-portability/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/results/confirmation/manifest.json>)\n- [Resultados y análisis](<https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/results/README.md>)\n- [Diseño y metodología](<https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/docs/methodology.md>)\n- [Corpus y procedencia](<https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/data/fixed.npz>)\n- [Dependencias del entorno medido](<https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/requirements-local.lock>)\n- [Licencia MIT](<https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/LICENSE>)","headings":[{"level":1,"text":"Vector Search Portability","url":"https://lucioduran.com/es/projects/vector-search-portability#title"},{"level":2,"text":"Problema y utilidad para agentes","url":"https://lucioduran.com/es/projects/vector-search-portability#problem"},{"level":2,"text":"Arquitectura","url":"https://lucioduran.com/es/projects/vector-search-portability#architecture"},{"level":2,"text":"Qué demuestra","url":"https://lucioduran.com/es/projects/vector-search-portability#demonstrates"},{"level":2,"text":"Resultados publicados","url":"https://lucioduran.com/es/projects/vector-search-portability#results"},{"level":3,"text":"Carga de lectura del informe original","url":"https://lucioduran.com/es/projects/vector-search-portability#results-load"},{"level":3,"text":"Filtros después de actualizar, ambos motores","url":"https://lucioduran.com/es/projects/vector-search-portability#results-filters"},{"level":2,"text":"Reproducir","url":"https://lucioduran.com/es/projects/vector-search-portability#reproduce"},{"level":3,"text":"Revisar la evidencia guardada","url":"https://lucioduran.com/es/projects/vector-search-portability#reproduce-replay"},{"level":3,"text":"Repetir la medición local","url":"https://lucioduran.com/es/projects/vector-search-portability#reproduce-inference"},{"level":2,"text":"Alcance y límites","url":"https://lucioduran.com/es/projects/vector-search-portability#scope"},{"level":2,"text":"Fuentes y revisión","url":"https://lucioduran.com/es/projects/vector-search-portability#sources"}],"sections":[{"heading":"Vector Search Portability","level":1,"url":"https://lucioduran.com/es/projects/vector-search-portability","content":"[Proyectos](<https://lucioduran.com/es/projects>) / Vector Search Portability"},{"heading":"Vector Search Portability","level":1,"url":"https://lucioduran.com/es/projects/vector-search-portability#title","content":"Comparación real de hnswlib y sqlite-vec con los mismos vectores, filtros y actualizaciones. Recall frente a búsqueda exacta, carga concurrente y pérdida por postfiltrado.\n\nAutor: [Lucio Durán](<https://lucioduran.com/es>) · Python 3.11.13 · Licencia: [MIT](<https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/LICENSE>)\n\nFicha publicada: 2026-10-21 · Ficha actualizada: 2026-10-21\n\n[Repositorio](<https://github.com/lucioduran/vector-search-portability>) · [Evidencia original](<https://raw.githubusercontent.com/lucioduran/vector-search-portability/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/results/reference/manifest.json>) · [Release v0.1.0](<https://github.com/lucioduran/vector-search-portability/releases/tag/v0.1.0>)"},{"heading":"Problema y utilidad para agentes","level":2,"url":"https://lucioduran.com/es/projects/vector-search-portability#problem","content":"Migrar de motor puede conservar el número de resultados y cambiar cuáles son, cuánto cuestan los filtros o qué ocurre después de una actualización. El proyecto define un contrato común y mide esos desvíos.\n\nUn agente que recupera contexto filtrado depende tanto de la semántica del filtro como del ranking. Esta comparación permite inspeccionar IDs, distancias, predicados y pérdida de candidatos antes de atribuir un fallo al modelo."},{"heading":"Arquitectura","level":2,"url":"https://lucioduran.com/es/projects/vector-search-portability#architecture","content":"1. **Entrada congelada.** 5.000 vectores float32 de 64 dimensiones, 40 consultas y 500 actualizaciones de vector y metadatos. El NPZ publicado fija los bytes de entrada.\n2. **Adaptadores nativos.** hnswlib 0.8.0 y sqlite-vec 0.1.6 comparten distancia L2 al cuadrado y filtros AND. Una búsqueda exhaustiva NumPy float64 actúa como referencia independiente.\n3. **Procesos y trazas.** Tres repeticiones aisladas por motor alternan el orden de ejecución. Se registran búsqueda nativa y postfiltrado, carga de uno y cuatro clientes, CPU, RSS y snapshots.\n\n- [Diseño y metodología](<https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/docs/methodology.md>)"},{"heading":"Qué demuestra","level":2,"url":"https://lucioduran.com/es/projects/vector-search-portability#demonstrates","content":"- Contratos comparables entre motores con métricas y semántica de filtros explícitas.\n- Evaluación de recall antes y después de cambios en vectores y metadatos.\n- Análisis de costos del adaptador y preservación de mediciones originales y de confirmación."},{"heading":"Resultados publicados","level":2,"url":"https://lucioduran.com/es/projects/vector-search-portability#results","content":"Resultados de referencia en Intel Xeon W-3223, macOS y Python 3.11.13. Las tablas de carga muestran medianas de tres ensayos, incluidos los percentiles de cada ensayo; no son percentiles agrupados.\n\nCada ensayo de carga realiza 400 búsquedas con filtros mezclados después de las actualizaciones. Recall@10 compara IDs con el top exacto. Pérdida de resultados mide cuántos faltan respecto de min(10, candidatos elegibles). El postfiltro parte de 40 vecinos globales."},{"heading":"Carga de lectura del informe original","level":3,"url":"https://lucioduran.com/es/projects/vector-search-portability#results-load","content":"| Motor / clientes | Solicitudes/s | p50 (ms) | p95 (ms) |\n| --- | --- | --- | --- |\n| hnswlib / 1 | 1503.6 | 0.363 | 2.295 |\n| hnswlib / 4 | 100.3 | 9.402 | 149.332 |\n| sqlite-vec / 1 | 1412.7 | 0.666 | 0.801 |\n| sqlite-vec / 4 | 2637.5 | 1.476 | 1.660 |"},{"heading":"Filtros después de actualizar, ambos motores","level":3,"url":"https://lucioduran.com/es/projects/vector-search-portability#results-filters","content":"| Modo | Recall@10 | Pérdida de resultados |\n| --- | --- | --- |\n| Nativo, grupos no vacíos | 1.0000 | 0.0000 |\n| Postfiltro por tenant | 0.4725 | 0.5275 |\n| Postfiltro selectivo | 0.0275 | 0.9725 |\n\nAmbos motores alcanzaron recall nativo 1,0 en esta muestra. El postfiltrado selectivo perdió el 97,25 % de los resultados disponibles aunque había 14 candidatos elegibles. Cuatro clientes degradaron el adaptador HNSW con predicado Python; el experimento no separa el costo del callback, el GIL y la máscara O(N).\n\nLa ejecución original conserva 9.600 búsquedas. Otra ejecución agrega 9.600 después de corregir la contabilidad de CPU, con la misma recuperación nativa y pérdida selectiva. Las cifras de la tabla siguen siendo las originales. [Resultados y análisis](<https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/results/README.md>)."},{"heading":"Reproducir","level":2,"url":"https://lucioduran.com/es/projects/vector-search-portability#reproduce","content":"Python 3.11, compilador C++ para hnswlib y SQLite con extensiones cargables. setup.py prepara las dependencias locales. No requiere modelos, servidor ni API.\n\nLos comandos usan rutas POSIX. Algunos Python de macOS deshabilitan extensiones SQLite: el README documenta una instalación compatible. Conservá el NPZ fijado, elegí una salida nueva y evitá mediciones pesadas concurrentes."},{"heading":"Revisar la evidencia guardada","level":3,"url":"https://lucioduran.com/es/projects/vector-search-portability#reproduce-replay","content":"```\ngit clone https://github.com/lucioduran/vector-search-portability.git\ncd vector-search-portability\ngit checkout 691a60ceecd4cb5eaaaf8570a073b80d96b9563e\npython3 scripts/setup.py\n.venv/bin/python -m vector_portability verify --output results/reference\n.venv/bin/python -m vector_portability verify --output results/confirmation\n```"},{"heading":"Repetir la medición local","level":3,"url":"https://lucioduran.com/es/projects/vector-search-portability#reproduce-inference","content":"```\nmkdir -p build\n.venv/bin/python -m vector_portability run --output build/reproduced\n.venv/bin/python -m vector_portability verify --output build/reproduced\n```"},{"heading":"Alcance y límites","level":2,"url":"https://lucioduran.com/es/projects/vector-search-portability#scope","content":"- Los vectores son sintéticos: se evalúan geometría y adaptadores, no relevancia lingüística ni escala de producción.\n- Los motores tienen distinta durabilidad. La inserción de SQLite incluye commit; HNSW no garantiza persistencia ante caídas.\n- Carga local de circuito cerrado sin red. RSS incluye intérprete y trazas; tres repeticiones sobre un equipo no establecen un ganador general.\n\n- [Bases vectoriales: motores, filtros y decisiones de arquitectura](<https://lucioduran.com/es/blog/vector-databases-pgvector-qdrant-pinecone>)"},{"heading":"Fuentes y revisión","level":2,"url":"https://lucioduran.com/es/projects/vector-search-portability#sources","content":"Las tablas resumen la ejecución de referencia del 21 de octubre de 2026. Los manifiestos enlazan los seis informes originales y los seis de confirmación con sus hashes. La revisión ejecutada indicada aquí corresponde a la referencia; el informe de confirmación identifica a416742cb7df20476b67c75dc4c13fe67c2d7ead.\n\n- Revisión consultada: [` 691a60ceecd4cb5eaaaf8570a073b80d96b9563e `](<https://github.com/lucioduran/vector-search-portability/commit/691a60ceecd4cb5eaaaf8570a073b80d96b9563e>)\n- Revisión registrada por el experimento: [` 7ee57a5af5e0f5bf4b46caf7eb55f0e1abd9fcf1 `](<https://github.com/lucioduran/vector-search-portability/commit/7ee57a5af5e0f5bf4b46caf7eb55f0e1abd9fcf1>)\n- Fecha del informe (UTC): 2026-10-21\n- Release publicada: [v0.1.0](<https://github.com/lucioduran/vector-search-portability/releases/tag/v0.1.0>) · 2026-10-21T22:16:31Z\n- SHA-256 del corpus: ` 53fd9ca277d581075d2eb7df63348fbd52e92d4a0797b1e40454367ed3d409e0 `\n\n- [README y uso](<https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/README.md>)\n- [Evidencia original](<https://raw.githubusercontent.com/lucioduran/vector-search-portability/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/results/reference/manifest.json>)\n- [Evidencia de confirmación](<https://raw.githubusercontent.com/lucioduran/vector-search-portability/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/results/confirmation/manifest.json>)\n- [Resultados y análisis](<https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/results/README.md>)\n- [Diseño y metodología](<https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/docs/methodology.md>)\n- [Corpus y procedencia](<https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/data/fixed.npz>)\n- [Dependencias del entorno medido](<https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/requirements-local.lock>)\n- [Licencia MIT](<https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/LICENSE>)"}],"links":[{"text":"Proyectos","url":"https://lucioduran.com/es/projects"},{"text":"Lucio Durán","url":"https://lucioduran.com/es"},{"text":"MIT","url":"https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/LICENSE"},{"text":"Repositorio","url":"https://github.com/lucioduran/vector-search-portability"},{"text":"Evidencia original","url":"https://raw.githubusercontent.com/lucioduran/vector-search-portability/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/results/reference/manifest.json"},{"text":"Release v0.1.0","url":"https://github.com/lucioduran/vector-search-portability/releases/tag/v0.1.0"},{"text":"Diseño y metodología","url":"https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/docs/methodology.md"},{"text":"README y uso","url":"https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/README.md"},{"text":"Resultados y análisis","url":"https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/results/README.md"},{"text":"Bases vectoriales: motores, filtros y decisiones de arquitectura","url":"https://lucioduran.com/es/blog/vector-databases-pgvector-qdrant-pinecone"},{"text":"691a60ceecd4cb5eaaaf8570a073b80d96b9563e","url":"https://github.com/lucioduran/vector-search-portability/commit/691a60ceecd4cb5eaaaf8570a073b80d96b9563e"},{"text":"7ee57a5af5e0f5bf4b46caf7eb55f0e1abd9fcf1","url":"https://github.com/lucioduran/vector-search-portability/commit/7ee57a5af5e0f5bf4b46caf7eb55f0e1abd9fcf1"},{"text":"v0.1.0","url":"https://github.com/lucioduran/vector-search-portability/releases/tag/v0.1.0"},{"text":"Evidencia de confirmación","url":"https://raw.githubusercontent.com/lucioduran/vector-search-portability/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/results/confirmation/manifest.json"},{"text":"Corpus y procedencia","url":"https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/data/fixed.npz"},{"text":"Dependencias del entorno medido","url":"https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/requirements-local.lock"},{"text":"Licencia MIT","url":"https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/LICENSE"}],"structuredData":[{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://lucioduran.com/es/projects/vector-search-portability#page","url":"https://lucioduran.com/es/projects/vector-search-portability","name":"Vector Search Portability","description":"Comparación real de hnswlib y sqlite-vec con los mismos vectores, filtros y actualizaciones. Recall frente a búsqueda exacta, carga concurrente y pérdida por postfiltrado.","inLanguage":"es","datePublished":"2026-10-21","dateModified":"2026-10-21","author":{"@id":"https://lucioduran.com/#person"},"mainEntity":{"@id":"https://lucioduran.com/projects/vector-search-portability#software"}},{"@type":"SoftwareSourceCode","@id":"https://lucioduran.com/projects/vector-search-portability#software","name":"Vector Search Portability","description":"Comparación real de hnswlib y sqlite-vec con los mismos vectores, filtros y actualizaciones. Recall frente a búsqueda exacta, carga concurrente y pérdida por postfiltrado.","url":"https://lucioduran.com/es/projects/vector-search-portability","codeRepository":"https://github.com/lucioduran/vector-search-portability","programmingLanguage":"Python","runtimePlatform":"Python 3.11.13","license":"https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/LICENSE","version":"v0.1.0","identifier":{"@type":"PropertyValue","propertyID":"git-commit","value":"691a60ceecd4cb5eaaaf8570a073b80d96b9563e"},"author":{"@type":"Person","@id":"https://lucioduran.com/#person","name":"Lucio Durán","url":"https://lucioduran.com"},"isAccessibleForFree":true,"citation":["https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/README.md","https://raw.githubusercontent.com/lucioduran/vector-search-portability/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/results/reference/manifest.json","https://raw.githubusercontent.com/lucioduran/vector-search-portability/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/results/confirmation/manifest.json","https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/results/README.md","https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/docs/methodology.md","https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/data/fixed.npz","https://github.com/lucioduran/vector-search-portability/blob/691a60ceecd4cb5eaaaf8570a073b80d96b9563e/requirements-local.lock","https://github.com/lucioduran/vector-search-portability/releases/tag/v0.1.0"]},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Proyectos","item":"https://lucioduran.com/es/projects"},{"@type":"ListItem","position":2,"name":"Vector Search Portability","item":"https://lucioduran.com/es/projects/vector-search-portability"}]}]}],"contentHash":"b40709d6a609b4aa100843c20be451e2ee1fc412570889a557343d8fc9a8aed6","provenance":{"method":"Deterministic serialization of the server-rendered main element","source":"https://lucioduran.com/es/projects/vector-search-portability","hashAlgorithm":"sha256","hashScope":"JSON document fields before contentHash and provenance","sourceHTMLBytes":46800,"contentBytes":7878}}
