我曾尝试使用纯
javascript在Telescope中实现搜索,因为看起来FTS对于Meteor实施起来还有一段时间,我还是不能让2.4与Meteor很好地玩.
我正在使用已在Telescope中实现的现有分页模型来显示Top / New / Best帖子,以及当您导航到例如路由器时在路由器中设置的搜索关键字的Session变量. /搜索/ foobar的.
但是,它似乎并没有起作用;当我有100个帖子时,常规的分页订阅只返回其中的25个,我的搜索结果只显示前25个帖子.
我几天试图调试这个问题,一直在撞墙,有时它会工作,有时却不行!
这是代码(我已经包含了所有其他搜索代码供参考):
app.js:
var resultsPostsSubscription = function() {
var handle = paginatedSearchSubscription( 10, 'searchResults' );
handle.fetch = function() {
return limitDocuments( searchPosts( Session.get( 'keyword' ) ), handle.loaded() );
};
return handle;
};
var resultsPostsHandle = resultsPostsSubscription();
paginated_sub.js:
我复制了现有的paginatedSubscription,因为我不能将Session var作为arg传递;它需要是动态的.我可能稍后会重构.
paginatedSearchSubscription = function (perPage/*, name, arguments */) {
var handle = new PaginatedSubscriptionHandle(perPage);
var args = Array.prototype.slice.call(arguments, 1);
Meteor.autosubscribe(function() {
var subHandle = Meteor.subscribe.apply(this, args.concat([
Session.get( 'keyword' ), handle.limit(), function() { handle.done(); }
]));
handle.stop = subHandle.stop;
});
return handle;
}
search.js :(新文件,在/ common目录下)
// get all posts where headline, categories, tags or body are LIKE %keyword%
searchPosts = function( keyword ) {
var query = new RegExp( keyword, 'i' );
var results = Posts.find( { $or: [ { 'headline': query }, { 'categories': query }, { 'tags': query }, { 'body': query } ] } );
return results;
};
publish.js:
Meteor.publish( 'searchResults', searchPosts );
posts_list.html:
<template name="posts_results">
{{> posts_list resultsPostsHandle}}
</template>
posts_list.js:
Template.posts_results.resultsPostsHandle = function() {
return resultsPostsHandle;
};
router.js:
导航中有一个搜索栏,可以重定向到此处
posts_results = function( keyword ) {
Session.set( 'keyword' , keyword );
return 'posts_results';
};
Meteor.Router.add({
...
'/search/:keyword':posts_results,
...
})
任何帮助将不胜感激!
最佳答案 稍晚但
here是关于如何在流星中实现全文搜索的完整文章.
“没有编辑任何Meteor代码的最简单方法是使用你自己的mongodb.”