8

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

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

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

4

4 回答 4

4

MongoDB 2.4 将在其中进行全文搜索。指南可以在这里找到。

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

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

文本搜索指南在这里mongod必须像这样运行

mongod --setParameter textSearchEnabled=true
于 2013-01-29T14:10:18.610 回答
1

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

于 2013-08-01T08:27:13.753 回答
0

你可能想看看:

https://github.com/Crenshinibon/spomet

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

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

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

于 2013-10-04T05:09:18.190 回答
0

还有另一种使用 Meteor 实现解决方案的方法。它是搜索源

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

上面的应用程序是一个即时搜索应用程序来搜索 Meteor 包。本文记录了它如何使用搜索源构建

简而言之,这就是搜索源的工作方式:

在客户端,创建一个源

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");

您可以从文档中了解有关上述各项的更多信息。

于 2015-01-10T04:23:57.197 回答