我正在试验 Meteor.js 并寻找可以在 Meteor/MongoDB 服务器上运行的全文搜索引擎。看来 Meteor 还没有开发这个功能。
我想知道是否存在将全文搜索添加到 Meteor 应用程序的现有解决方案。
我唯一能找到的是MongoLantern,它有 node.js API。我应该如何将 MongoLantern 添加到我的 Meteor 应用程序中?
我正在试验 Meteor.js 并寻找可以在 Meteor/MongoDB 服务器上运行的全文搜索引擎。看来 Meteor 还没有开发这个功能。
我想知道是否存在将全文搜索添加到 Meteor 应用程序的现有解决方案。
我唯一能找到的是MongoLantern,它有 node.js API。我应该如何将 MongoLantern 添加到我的 Meteor 应用程序中?
MongoDB 2.4 将在其中进行全文搜索。指南可以在这里找到。
如果您准备运行开发版本,您现在可以下载 MongoDB 2.3 - 它包含文本搜索。
更新: MongoDB 2.4 已经发布。文本搜索被描述为 Beta。
文本搜索指南在这里,mongod
必须像这样运行
mongod --setParameter textSearchEnabled=true
看看http://lunrjs.com/。这也可能有助于获得真实 Meteor 应用程序的近乎即时的性能。
你可能想看看:
https://github.com/Crenshinibon/spomet
这是一个提供全文搜索的 Meteor 原生包。它有一个易于包含自动完成功能的搜索框。
您可以在此处阅读有关扩展示例应用程序的教程:
http://shiggyenterprises.wordpress.com/2013/09/28/developing-a-full-text-search-enabled-meteor-app/
还有另一种使用 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");
您可以从文档中了解有关上述各项的更多信息。