name: search-config
description: “搜索索引配置和全文搜索管理”
emoji: “🔎”
搜索配置 - 完整API参考
配置搜索索引,管理搜索后端,并优化全文搜索。
聊天命令
查看状态
/search-config 显示搜索配置
/search-config status 索引状态
/search-config stats 搜索统计
索引管理
/search-config rebuild 重建所有索引
/search-config rebuild memories 重建特定索引
/search-config optimize 优化索引
/search-config clear <index> 清除索引
配置
/search-config backend sqlite 设置后端
/search-config backend elasticsearch 使用Elasticsearch
/search-config mode hybrid 设置搜索模式
/search-config boost semantic 0.7 设置语义权重
TypeScript API参考
创建搜索服务
import { createSearchService } from 'clodds/search';
const search = createSearchService({
// 后端
backend: 'sqlite', // 'sqlite' | 'elasticsearch' | 'typesense' | 'meilisearch'
// 搜索模式
mode: 'hybrid', // 'fulltext' | 'semantic' | 'hybrid'
// 混合权重
semanticWeight: 0.6,
fulltextWeight: 0.4,
// 嵌入提供者(用于语义)
embeddings: {
provider: 'openai',
model: 'text-embedding-3-small',
},
// 存储
dbPath: './search.db',
});
索引文档
// 索引单个文档
await search.index({
collection: 'memories',
id: 'mem-1',
content: '用户偏好保守交易',
metadata: {
type: 'preference',
userId: 'user-123',
},
});
// 索引批量
await search.indexBatch({
collection: 'documents',
documents: [
{ id: 'doc-1', content: '第一份文档', metadata: {} },
{ id: 'doc-2', content: '第二份文档', metadata: {} },
],
});
搜索
// 全文搜索
const results = await search.search({
query: '交易策略',
collection: 'documents',
limit: 10,
});
for (const result of results) {
console.log(`${result.id}: ${result.score}`);
console.log(` ${result.snippet}`);
}
// 带过滤器
const results = await search.search({
query: '比特币',
collection: 'news',
filters: {
date: { gte: '2024-01-01' },
source: 'reuters',
},
limit: 20,
});
混合搜索
// 结合全文和语义
const results = await search.hybridSearch({
query: '如何在交易中管理风险',
collection: 'documents',
semanticWeight: 0.7,
fulltextWeight: 0.3,
limit: 10,
});
获取索引统计
const stats = await search.getStats();
console.log('索引统计:');
for (const [collection, info] of Object.entries(stats.collections)) {
console.log(`${collection}:`);
console.log(` 文档: ${info.documentCount}`);
console.log(` 大小: ${info.sizeMB} MB`);
console.log(` 最后索引: ${info.lastIndexed}`);
}
console.log(`
搜索统计:`);
console.log(` 今日查询: ${stats.queriesToday}`);
console.log(` 平均延迟: ${stats.avgLatencyMs}ms`);
console.log(` 缓存命中率: ${stats.cacheHitRate}%`);
重建索引
// 重建所有索引
await search.rebuildAll();
// 重建特定集合
await search.rebuild('memories');
// 带进度回调
await search.rebuild('documents', {
onProgress: (progress) => {
console.log(`${progress.current}/${progress.total} (${progress.percent}%)`);
},
});
优化索引
// 优化以获得更好的性能
await search.optimize();
// 优化特定集合
await search.optimize('documents');
清除索引
// 清除特定集合
await search.clear('memories');
// 清除全部
await search.clearAll();
配置后端
// 切换到Elasticsearch
await search.setBackend('elasticsearch', {
url: process.env.ELASTICSEARCH_URL,
index: 'clodds',
});
// 切换到Typesense
await search.setBackend('typesense', {
url: process.env.TYPESENSE_URL,
apiKey: process.env.TYPESENSE_API_KEY,
});
搜索后端
| 后端 |
最适合 |
特性 |
| SQLite |
开发,小数据 |
简单,嵌入式 |
| Elasticsearch |
生产,大数据 |
可扩展,强大 |
| Typesense |
快速搜索 |
拼写容忍 |
| Meilisearch |
即时搜索 |
易于设置 |
搜索模式
| 模式 |
描述 |
fulltext |
传统的关键词匹配 |
semantic |
向量相似性搜索 |
hybrid |
组合(两者最佳) |
混合搜索权重
// 更强调意义
const results = await search.hybridSearch({
query: '风险管理',
semanticWeight: 0.8, // 80%语义
fulltextWeight: 0.2, // 20%关键词
});
// 更强调精确匹配
const results = await search.hybridSearch({
query: 'BTCUSDT',
semanticWeight: 0.2, // 20%语义
fulltextWeight: 0.8, // 80%关键词
});
最佳实践
- 使用混合搜索 —— 大多数查询的最佳结果
- 定期重建 —— 保持索引最新
- 批量插入后优化 —— 提高性能
- 监控延迟 —— 如果太慢则扩展
- 调整权重 —— 调整语义/全文平衡