【问题标题】:How to implement Full Text Search in Meteor/Telescope如何在 Meteor/Telescope 中实现全文搜索
【发布时间】:2013-04-08 12:05:54
【问题描述】:

我曾尝试使用纯 javascript 在 Telescope 中实现搜索,因为看起来 FTS 对 Meteor 来说还需要一段时间才能实现,而且我还无法让 2.4 与 Meteor 很好地配合使用。

我正在使用已在 Telescope 中实现的现有分页模型来显示热门/新/最佳帖子,以及当您导航到例如路由器时设置的搜索关键字的会话变量。 /search/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,
  ...
})

任何帮助将不胜感激!

【问题讨论】:

  • 我们自己一直在为这些复杂的订阅而苦苦挣扎。也许直接联系 Sacha + I 会更有成效,我们可以一起努力解决这个问题。我想你可以找出我们的电子邮件地址 :)
  • 您介意在 GitHub 上克隆 Telescope 并将您的所有确切更改推送到它吗?我做了一个非常简单的搜索测试(gist.github.com/yeputons/8807589),有两个订阅,它按预期工作。

标签: meteor publish-subscribe


【解决方案1】:

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

“不编辑任何 Meteor 代码的最简单方法是使用自己的 mongodb。”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 2011-04-29
    • 2013-03-08
    相关资源
    最近更新 更多