我需要添加全局搜索,搜索一些集合(例如客户端,订单,项目......)并将所有答案放在一个列表中。
我已经查看了find src/ -mtime +5 -print0 | cpio -0 -o | { cd target && cpio -i; }
和EasySearch
,但他们当时只支持在一个集合中进行搜索。
有人已经解决了这个问题吗?什么是最好的开始方式?
答案 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>