我希望实现一个类型前瞻/自动完成搜索功能,这涉及IT技术。我的MongoDB模式中有一些属性,但我只想按类别、标题、预览或日期进行搜索。
这是我的MongoDB单个文章的模式(我使用mongoose作为ORM):
{
title: { type: String, required: true}
, preview: { type: String, required: true}
, body: { type: String, required: true}
, category: {type: String}
, created_at: { type: Date, default: Date.now }
}
每次我创建、更新或删除内容时,都需要重新索引以使搜索得到更新。搜索将自动完成,例如,当我有两篇文章分别标题为“欢迎来到 stackoverflow”和“如何避免 stackoverflow”,并且用户键入
't'
时,我将使用 AJAX 显示这两篇文章,因为它们的标题中都包含 't'
字符。我还想突出显示每个单独的 't'
,在 'to'
中的 't'
,'t'
在 s't'
ackoverflow 中,表明查询命中了某些内容。(我希望看起来类似于我们在 stackoverflow.com 上搜索特定“标签”的情况)现在的问题是,我应该使用不同的索引架构,还是只是坚持使用现有的架构?因为我现在不需要进行全文搜索,所以似乎我不会使用包含数千个单词的“body”属性。
- 标题属性可能只有 ~45 个字符和平均 3 或 4 个单词。
- 分类通常只有一个单词,平均 9-15 个字符。
- 预览将是最大的数据集,约有 ~150 个字符和平均 20 个单词。
那么问题是,我如何将 trie 算法融入我的计划中?另一件事是,每次进行 CRUD 操作时都需要重新构建索引。
如果您能给出任何建议/指向正确方向的指针或可以帮助我完成此操作的任何文章(我正在寻求最佳实践/性能最佳的方法),我将不胜感激。谢谢。让我知道是否需要澄清问题。