У меня есть приложение-метеор, для которого я добавил пакет поиска-источника для поиска в определенных коллекциях, и он работает частично. То есть, когда я ищу термин foo bar
, он возвращает результаты для каждого из «foo» и «bar». Это нормально, но я также хочу иметь возможность заключать термины в кавычки следующим образом: "foo bar"
и получать результаты только для точного соответствия. в тот момент, когда я делаю это, я получаю пустой набор. Вот мой код сервера:
//Server.js
SearchSource.defineSource('FruitBasket', function(searchText, options) {
// options = options || {}; // to be sure that options is at least an empty object
if(searchText) {
var regExp = buildRegExp(searchText);
var selector = {$or: [
{'fruit.name': regExp},
{'fruit.season': regExp},
{'fruit.treeType': regExp}
]};
return Basket.find(selector, options).fetch();
} else {
return Basket.find({}, options).fetch();
}
});
function buildRegExp(searchText) {
// this is a dumb implementation
var parts = searchText.trim().split(/[ \-\:]+/);
return new RegExp("(" + parts.join('|') + ")", "ig");
}
и мой код клиента:
//Client.js
Template.dispResults.helpers({
getPackages_fruit: function() {
return PackageSearch_fruit.getData({
transform: function(matchText, regExp) {
return matchText.replace(regExp, "<b>$&</b>")
},
sort: {isoScore: -1}
});
}
});
Заранее спасибо!