Ben*_*jia 8 javascript ajax trie mongodb node.js
我正在寻找实现类型/自动完成搜索的乐趣.我在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 }
}
Run Code Online (Sandbox Code Playgroud)
每次我创建,更新或销毁时,我都必须重新编制索引,以便更新搜索.搜索将自动完成,例如,当我有两篇文章分别标题为"欢迎使用stackoverflow"和"如何避免stackoverflow"并且用户键入一个键时,'t'我会使用AJAX显示两篇文章,因为两者都有字符't'在他们的头衔.我也想强调每一个't'; 在't'中'to','t'以s 't'ackoverflow,表示查询命中东西.(我希望它看起来与我们在stackoverflow.com上搜索特定'标签'时类似)
现在的问题是我应该使用不同的模式进行索引,还是仅仅坚持我现有的模式?似乎我不会使用包含完整文章的'body'属性,并且其中包含数千个单词,因为我现在不打算进行全文搜索.
我可能想用trie数据结构来实现它.最重要的是,我可能会说,这样做的一种方法是通过AJAX请求每次击键将被路由到node.js处理程序,然后从那里进行查询到mongoDB将返回每个具有单词的条目有一个字母与用户输入的击键相匹配,作为JSON文件.然后,我将解析该JSON文件并显示每个条目.
那么问题是我如何将trie算法纳入我的计划?另一件事是我每次进行CRUD操作时都需要重建索引.
非常感谢任何有关正确方向的建议/指示或任何有助于我这样做的文章.(我希望做最好的练习/表演方式)谢谢.如果需要澄清这个问题,请告诉我.
小智 8
我认为trie不会起作用.Trie通常从字符串的开头开始操作.因此,如果您使用trie索引标题,则键入"t"的用户只能搜索以tr 开头的标题.我认为使用mongodb是最好的选择,除非你有大量的文本,只需要将正则表达式与$或运算符结合使用.
在文本输入框中的change事件中,您将要向您的节点服务器发出一个AJAX请求,该服务器将向mongodb发出查询并以JSON数组的形式返回结果.
mongo中的正则表达式: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/
| 归档时间: |
|
| 查看次数: |
6477 次 |
| 最近记录: |