我正在试验Meteor.js并寻找可以在Meteor / MongoDB服务器上运行的全文搜索引擎。似乎Meteor还没有开发出这个功能。
我想知道是否有现成的解决方案可以将全文搜索添加到Meteor应用程序。
我唯一能找到的是MongoLantern,它有node.js API。我应该如何将MongoLantern添加到我的Meteor应用程序中?
答案 0 :(得分:4)
MongoDB 2.4将在其中进行全文搜索。 Guide can be found here.
如果您准备运行开发版本,可以下载MongoDB 2.3 now - 它包含文本搜索。
更新: MongoDB 2.4已经发布。文本搜索被描述为Beta。
text search is here和mongod
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了解有关上述每种方法的更多信息。