Полнотекстовый поиск с помощью Meteor.js и MongoDB



Я экспериментирую с Метеором.js и ищет полнотекстовую поисковую систему, которая может работать на сервере Meteor / MongoDB. Похоже, что Meteor не развил эту особенность.



Интересно, есть ли существующее решение для добавления полнотекстового поиска в приложение Meteor.



Единственное, что я могу найти, это MongoLantern, который имеет узел.JS API. Как я могу идти о добавлении MongoLantern в мое приложение Метеор?

554   4  

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, как вам нужно.

Вышеуказанное приложение-это приложение мгновенного поиска для поиска пакетов 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

    Ничего не найдено.