Полнотекстовый поиск с помощью Meteor.js и MongoDB
Я экспериментирую с Метеором.js и ищет полнотекстовую поисковую систему, которая может работать на сервере Meteor / MongoDB. Похоже, что Meteor не развил эту особенность.
Интересно, есть ли существующее решение для добавления полнотекстового поиска в приложение Meteor.
Единственное, что я могу найти, это MongoLantern, который имеет узел.JS API. Как я могу идти о добавлении MongoLantern в мое приложение Метеор?
4 ответов:
MongoDB 2.4 будет иметь полный текстовый поиск в нем. руководство можно найти здесь.
Если вы готовы запустить релизы разработки, вы можете скачать MongoDB 2.3 now - он содержит текстовый поиск.
Обновление: выпущен MongoDB 2.4. Текстовый поиск описывается как бета-версия.
Руководство для текстового поиска находится здесь и
mongodдолжно быть запущено вот такmongod --setParameter textSearchEnabled=true
Взгляните на http://lunrjs.com/. это также может помочь в получении почти мгновенной производительности приложения real Meteor.
Возможно, вы захотите взглянуть на:
Https://github.com/Crenshinibon/spomet
Это пакет Meteor native для обеспечения полнотекстового поиска. Он имеет легко включаемое окно поиска с автозавершением.
Вы можете прочитать учебник о расширенном примере приложения здесь:
Http://shiggyenterprises.wordpress.com/2013/09/28/developing-a-full-text-search-enabled-meteor-app/
Существует также другой способ реализации решения с помощью Meteor. Это Источник поиска .
Это своего рода typeahead, но без части пользовательского интерфейса. Он предоставляет реактивный источник данных, где вы можете использовать его для построения пользовательского интерфейса с Blaze, как вам нужно.
- Вот демонстрационное приложение: https://instant-search-demo.meteor.com/
Вышеуказанное приложение-это приложение мгновенного поиска для поиска пакетов 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");Вы можете узнать больше о том, как работает каждый из вышеперечисленных методов, из документации .
Comments