MongoDB + Node.js + AJAX解决scheme,用于自动完成search

我正在寻找实现一个提前/自动完成search乐趣。 我在mongoDB的模式中有一些属性,但是我希望能够仅通过类别,标题,预览或date进行search。

这是我的一篇文章(我使用mongoose作为ORM)的mongoDB模式:

{ 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 } } 

每次创build,更新或销毁时,都必须重新索引,以便search得到更新。 search将被自动完成,例如,当我有两篇文章,分别为“欢迎使用stackoverflow”和“如何避免使用stackoverflow”,并且用户input一个键't'那么我会使用AJAX显示这两篇文章他们的头衔都有't'字样。 我也想突出每一个't' ; 'to'中的't''t'中的't' ,表示查询到达某个事件。 (我期望它会看起来类似于当我们在这里search特定的'标签'在stackoverflow.com)

现在的问题是我应该使用不同的模式进行索引,或只是坚持我现有的模式? 看起来我不会使用包含整篇文章的“body”属性,并且有几千个单词,因为我现在不打算进行全文search。

  • 标题属性可能只有45个字符,平均3或4个字。
  • 类别大多只有1个字,平均9-15个字符。
  • 预览将是最大的数据集,约150个字符,平均20个字。

我可能想要使用trie数据结构来实现这个。 在我的头上,我可能会说这样做的一种方法是通过使AJAX请求每个击键将被路由到node.js处理程序,然后从那里进行查询到mongoDB将返回每个条目,具有与由用户input的按键匹配的字母作为JSON文件。 然后我将parsing该JSON文件并显示每个条目。

那么问题是如何将triealgorithm应用到我的计划中? 另一件事是我需要重build索引每次我做CRUD操作。

将不胜感激任何build议/指向正确的方向或任何文章,可以帮助我这样做。 (我正在寻找最佳做法/performance方式)谢谢。 让我知道这个问题是否需要澄清。

我不认为一个特里将起作用。 Trie通常从一个string的开头开始操作。 因此,如果您使用索引来为您的标题build立索引,那么input“t”的用户只能search以t 开头的标题。 我认为使用mongodb的最好方法就是使用正则expression式与$或者操作符结合使用,除非拥有大量的文本。

在文本input框中的更改事件上,您将需要向您的节点服务器发出AJAX请求,该服务器将向mongodb发出查询,并将结果返回到JSON数组中。

mongo中的正则expression式: http : //www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-RegularExpressions

$或运营商: http : //www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24or

一个演示如何jQuery UI处理自动完成(用于参考AJAX请求和填写值): http : //jqueryui.com/demos/autocomplete/