使用Meteor.js和MongoDB进行全文搜索

时间:2013-01-28 17:38:36

标签: mongodb meteor

我正在试验Meteor.js并寻找可以在Meteor / MongoDB服务器上运行的全文搜索引擎。似乎Meteor还没有开发出这个功能。

我想知道是否有现成的解决方案可以将全文搜索添加到Meteor应用程序。

我唯一能找到的是MongoLantern,它有node.js API。我应该如何将MongoLantern添加到我的Meteor应用程序中?

4 个答案:

答案 0 :(得分:4)

MongoDB 2.4将在其中进行全文搜索。 Guide can be found here.

如果您准备运行开发版本,可以下载MongoDB 2.3 now - 它包含文本搜索。

更新: MongoDB 2.4已经发布。文本搜索被描述为Beta。

text search is heremongod must be run like this

的指南
mongod --setParameter textSearchEnabled=true

答案 1 :(得分:1)

看看http://lunrjs.com/。这也可能有助于获得真正的Meteor应用程序的近乎即时的性能。

答案 2 :(得分:0)

您可能需要查看:

https://github.com/Crenshinibon/spomet

这是一个提供全文搜索的Meteor本机包。它有一个易于包含自动完成的搜索框。

您可以在此处阅读有关扩展示例应用程序的教程:

http://shiggyenterprises.wordpress.com/2013/09/28/developing-a-full-text-search-enabled-meteor-app/

答案 3 :(得分:0)

还有另一种方法可以使用Meteor实现解决方案。它是Search Source

它是一种 typeahead 但没有UI部分。它公开了一个反应式数据源,您可以根据需要使用它来使用Blaze构建UI。

以上应用程序是一个搜索Meteor包的即时搜索应用程序。 this文章

中记录了如何使用搜索源构建它

简而言之,这就是搜索源的工作原理:

在客户端中,创建源

var options = {
  keepHistory: 1000 * 60 * 5,
  localSearch: true
};
var fields = ['packageName', 'description'];

PackageSearch = new SearchSource('packages', fields, options);

然后在服务器中定义搜索源

SearchSource.defineSource('packages', function(searchText, options) {
  var options = {sort: {isoScore: -1}, limit: 20};

  if(searchText) {
    var regExp = buildRegExp(searchText);
    var selector = {packageName: regExp, description: regExp};
    return Packages.find(selector, options).fetch();
  } else {
    return Packages.find({}, options).fetch();
  }
});

function buildRegExp(searchText) {
  // this is dumb implementation
  var parts = searchText.trim().split(' ');
  return new RegExp("(" + parts.join('|') + ")", "ig");
}

现在获取数据源并将其渲染

Template.searchResult.helpers({
  getPackages: function() {
    return PackageSearch.getData({
      transform: function(matchText, regExp) {
        return matchText.replace(regExp, "<b>$&</b>")
      },
      sort: {isoScore: -1}
    });
  }
});

最后进行搜索

PackageSearch.search("the text to search");

您可以从documentation了解有关上述每种方法的更多信息。