API

indexbind 有四个面向运行时的入口:

Node 侧的目录与工件 API 还支持可选的索引级约定文件:

这些文件位于被索引根目录的 .indexbind/ 目录旁边,且只从那个确切的根自动发现。

indexbind

面向原生 SQLite 工件的 Node 入口:

import { openIndex } from 'indexbind';

const index = await openIndex('./index.sqlite');
const hits = await index.search('rust guide', {
  topK: 5,
  mode: 'hybrid',
  reranker: { kind: 'embedding-v1', candidatePoolSize: 25 },
  relativePathPrefix: 'guides/',
});

openIndex(artifactPath, options?)

打开原生 SQLite 工件并返回一个 Index

打开选项:

当这个 Index 实例应保持仅词法时使用 modeProfile: 'lexical'。在该 profile 下,index.search() 默认词法模式,并拒绝 mode: 'hybrid' / mode: 'vector'

当工件 sourceRoot 含有 indexbind.search.js 时,openIndex() 会应用:

index.info()

返回工件元数据,例如:

index.search(query, options?)

主要选项:

在 Node 入口上,metadata 当前在 TypeScript API 中暴露为字符串到字符串的映射。

重排器选项:

得分调整选项:

返回的命中包括:

bestMatch 包含:

indexbind/build

编程式构建与增量缓存 API:

import {
  buildCanonicalBundle,
  updateBuildCache,
  exportArtifactFromBuildCache,
  exportCanonicalBundleFromBuildCache,
} from 'indexbind/build';

主要输入形态:

当宿主应用已经拥有规范化文档集、希望直接从代码构建而不是通过 CLI 扫描目录时,使用这个入口。

关于宿主先分类文档、再注入元数据的更大混合内容示例,参见采用示例

可用辅助函数:

对基于目录的辅助函数,如果输入根含有 indexbind.build.js,这些 API 会自动应用:

这让宿主特定的文档塑形保持挂在共享的目录扫描器与增量缓存流程上。

updateBuildCache(...) 返回:

典型增量流程:

import {
  updateBuildCache,
  exportArtifactFromBuildCache,
  exportCanonicalBundleFromBuildCache,
} from 'indexbind/build';

await updateBuildCache(
  './.indexbind-cache.sqlite',
  [
    {
      relativePath: 'guides/rust.md',
      title: 'Rust Guide',
      content: '# Rust Guide\n\nRust retrieval guide.',
      metadata: { lang: 'rust' },
    },
  ],
  { embeddingBackend: 'hashing' },
  ['guides/old.md'],
);

await exportArtifactFromBuildCache('./.indexbind-cache.sqlite', './index.sqlite');
await exportCanonicalBundleFromBuildCache('./.indexbind-cache.sqlite', './index.bundle');

indexbind/web

面向规范化 bundle 的浏览器与 worker 入口:

import { openWebIndex } from 'indexbind/web';

该路径默认使用 wasm 支撑的 hybrid/vector 运行时。如果你用 modeProfile: 'lexical' 打开,它可以留在更轻的仅词法路径上,不加载向量与模型文件。

openWebIndex(base, options?) 返回一个 WebIndex

打开选项:

modeProfile: 'lexical' 会让该 WebIndex 实例跳过向量/模型加载,并使词法模式成为 search() 的默认值。

WebIndex.info() 返回规范化 bundle 元数据,例如:

WebIndex.search(query, options?) 接受与 Node 入口相同的搜索选项,只是元数据值可以使用更宽的 JSON 值形态。

indexbind/cloudflare

Cloudflare Worker 入口:

import { openWebIndex } from 'indexbind/cloudflare';

在 Workers 内用它替代 indexbind/web,让 wasm 通过 Worker 兼容的静态模块路径加载。

它接受与 indexbind/web 相同的可选 fetch 覆盖,当宿主希望经由 ASSETS.fetch(...) 而不是公开 URL 读取 bundle 文件时很有用。

搜索默认值与模式

合理的起点:

const hits = await index.search(query, {
  topK: 10,
  mode: 'hybrid',
  reranker: {
    kind: 'embedding-v1',
    candidatePoolSize: 25,
  },
});

当宿主应用有明确产品边界时,使用元数据过滤:

const hits = await index.search(query, {
  metadata: {
    lang: 'rust',
    visibility: 'public',
  },
});

当应用想要宿主定义的排序先验时,使用基于元数据的得分调整:

const hits = await index.search(query, {
  scoreAdjustment: {
    metadataNumericMultiplier: 'directory_weight',
  },
});

当产品想裁掉弱尾部匹配、允许少于 topK 条命中时,使用 minScore

const hits = await index.search(query, {
  topK: 10,
  minScore: 0.05,
});

关于这些旋钮如何相互作用的完整解释,参见搜索质量控制