我正在尝试使用Meteor.js,并寻找一种可以在Meteor/MongoDB服务器上运行的全文搜索引擎。看起来Meteor还没有开发出这个功能。
我想知道是否有现有的解决方案可以为Meteor应用程序添加全文搜索。
我唯一能找到的是MongoLantern,它具有node.js API。我该如何将MongoLantern添加到我的Meteor应用程序中?
我正在尝试使用Meteor.js,并寻找一种可以在Meteor/MongoDB服务器上运行的全文搜索引擎。看起来Meteor还没有开发出这个功能。
我想知道是否有现有的解决方案可以为Meteor应用程序添加全文搜索。
我唯一能找到的是MongoLantern,它具有node.js API。我该如何将MongoLantern添加到我的Meteor应用程序中?
mongod
必须像这样运行。mongod --setParameter textSearchEnabled=true
还有一种使用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");
您可以通过文档了解有关上述每个功能的更多信息。
你可能想要看一下:
https://github.com/Crenshinibon/spomet
这是一个Meteor本地包,提供全文搜索功能。它具有易于包含的带自动完成的搜索框。
您可以在此处阅读有关扩展示例应用程序的教程:
http://shiggyenterprises.wordpress.com/2013/09/28/developing-a-full-text-search-enabled-meteor-app/