如何在流星/望远镜中实现全文搜索

时间:2013-04-08 12:05:55

标签: meteor publish-subscribe

我尝试使用纯javascript在Telescope中实现搜索,因为看起来FTS对于Meteor实施起来还有一段时间了,但我还是无法与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,
  ...
})

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

有点晚了但是here是关于如何在流星中实现全文搜索的完整文章。

&#34;没有编辑任何Meteor代码的最简单方法是使用你自己的mongodb。&#34;