增强搜索与摘要生成:提高站内检索命中率
对应代码:app/repository/base/BaseStandardRepository.js 中的 _buildEnhancedSearchCondition、_generateSearchVariants、_processResult(含搜索摘要生成)。
TL;DR
- 搜索关键词会先被清洗、拆词、生成格式/拼写/缩写变体,再交给数据库特定的匹配逻辑
- 默认使用增强搜索,子类可重写
_buildDatabaseSpecificSearchConditions适配不同数据库 - 在返回分页结果时,若传入
searchkey,会尝试生成命中摘要写入docs
实战示例
js
class CommentRepository extends BaseStandardRepository {
constructor(ctx) {
super(ctx, 'Comment');
}
_getDefaultSearchKeys() {
return ['content', 'authorName'];
}
async search(payload = {}, options = {}) {
const searchKeys = this._getDefaultSearchKeys();
const searchCondition = this._buildSearchCondition(payload.searchkey, searchKeys, { debug: options.debug });
const filters = this._mergeQueryConditions(options.filters, searchCondition);
const params = this._standardizeParams(payload, { filters });
const result = await this.adapter.find(params);
return this._processResult(result, payload, options);
}
}机制解读
- 关键词预处理:
_preprocessSearchKey会清理特殊字符并合并多余空格,得到基础搜索词。 - 变体生成:
_generateSearchVariants会创建words/phrases/combinations,覆盖 kebab/snake/camel、大小写、缩写、常见拼写、数字文本化等。 - 数据库特定条件:由子类
_buildDatabaseSpecificSearchConditions实现,针对 MongoDB/MariaDB 构造正则/LIKE 或全文索引条件。 - 摘要生成:
_processResult若检测到_searchContext与payload.searchkey,会调用_generateSearchSnippets(在 EnhancedDataTransformer 中)为文档添加高亮或片段。 - 调试日志:开发模式或 options.debug 时,
_logSearchDebugInfo会输出关键词、变体、搜索字段与最终条件,便于调整权重。
内链参考
- 双数据库配置:/guide/dual-database
- Repository 模式概览:/guide/repository-pattern
- 异常与错误处理:/guide/exception-handling
- 部署与运维:/deployment/ops