【发布时间】:2012-02-20 22:57:29
【问题描述】:
我正在寻找实现输入/自动完成搜索的乐趣。我在 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 }
}
每次创建、更新或销毁时,我都必须重新索引以更新搜索。搜索将自动完成,例如,当我有两篇分别标题为“Welcome to stackoverflow”和“How to Avoid stackoverflow”的文章并且用户键入一个键 't' 时,我将使用 AJAX 显示这两篇文章,因为两者的标题中都有字符't'。我还想强调每一个't'; 'to'中的't',s't'ackoverflow中的't',表示查询命中。 (我希望它看起来类似于我们在 stackoverflow.com 上搜索特定的“标签”)
现在的问题是我应该使用不同的架构进行索引,还是只使用我现有的架构?看来我不会使用包含完整文章并包含数千个单词的“body”属性,因为我现在不打算进行全文搜索。
- 标题属性平均可能只有约 45 个字符和 3 或 4 个单词。
- 类别大多只有 1 个单词,平均 9-15 个字符。
- 预览将是最大的数据集,平均约 150 个字符和 20 个单词。
我可能想使用 trie 数据结构来实现它。在我的脑海中,我可能会说这样做的一种方法是让 AJAX 请求每个将被路由到 node.js 处理程序的击键,然后从那里对 mongoDB 进行查询,该查询将返回每个包含单词的条目有一个字母与用户键入的 JSON 文件中的击键相匹配。然后,我将解析该 JSON 文件并显示每个条目。
那么问题是如何将 trie 算法纳入我的计划?另一件事是我每次进行 CRUD 操作时都需要重建索引。
将不胜感激任何建议/指向正确方向或任何文章可以帮助我做到这一点。 (我正在寻找最佳实践/高性能方式)谢谢。让我知道这个问题是否需要澄清。
【问题讨论】:
标签: javascript ajax node.js mongodb trie