在Meteor中实现全局搜索(在多个集合中搜索)的最佳方法是什么

时间:2015-05-18 19:58:46

标签: mongodb meteor

我需要添加全局搜索,搜索一些集合(例如客户端,订单,项目......)并将所有答案放在一个列表中。

我已经查看了find src/ -mtime +5 -print0 | cpio -0 -o | { cd target && cpio -i; } EasySearch,但他们当时只支持在一个集合中进行搜索。

有人已经解决了这个问题吗?什么是最好的开始方式?

1 个答案:

答案 0 :(得分:4)

经过几天的研究后,我发现EasySearch所以提供了对多个集合的搜索,它只是隐藏在文档中。

所需要的只是:

EasySearch.createSearchIndex('collection1', {
   'field' : ['name'],
   'collection' : Collection1,
   'use' : 'minimongo',
   'limit' : 20,
});

EasySearch.createSearchIndex('collection2', {
   'field' : ['name', 'text'],
   'collection' : Collection2,
   'use' : 'minimongo',
   'limit' : 20,
});

Template.yourTemplate.indexes = ['players', 'cars'];

HTML

<div class="search-input">
     <!-- indexes is a javascript array which holds 'players' and 'cars' -->
     {{> esInput index=indexes placeholder="Search..." }}
</div>

<div class="results-wrapper">
     {{#esEach index="players"}}
         {{> player}}
     {{/esEach}}

     {{#esEach index="cars"}}
         {{> car}}
     {{/esEach}}
</div>

此外,我建议您阅读此问题中的讨论:https://github.com/matteodem/meteor-easy-search/issues/10

  

EasySearch更改其API后更新。现在你应该这样做:

Collection1Index = EasySearch.Index({
   'collection': Collection1,
   'fields': ['name', 'description'],
   'engine': new EasySearch.MongoDB()
});

Collection2Index = EasySearch.Index({
   'collection': Collection2,
   'fields': ['name', 'text'],
   'engine': new EasySearch.MongoDB()
});

Template.yourTemplate.helpers ({
    indexes: function() { return [Collection1Index, Collection2Index] }
    attributes: function() { return {placeholder: "Search clients, orders and suppliers...", class: 'form-control'} }
    Collection1Index: function () { return Collection1Index }
    Collection2Index: function () { return Collection2Index }
});

HTML

<div class="search-input">
     {{> EasySearch.Input indexes=indexes attributes=attributes }}
</div>

<div class="results-wrapper">
     {{#EasySearch.Each index=Collection1Index}}
         {{> player}}
     {{/EasySearch.Each}}

     {{#EasySearch.Each index=Collection2Index}}
         {{> car}}
     {{/EasySearch.Each}}
</div>