2016-08-18 71 views
1

短一个:我需要正则表达式搜索一个集合,将完美匹配移动到结果的第一个位置,然后限制结果。流星排序和限制发布

龙一:

在出版我需要自定义排序我的结果,然后(当然排序后),限制它。

我的自定义排序就像按照相关性排序但不完全一样。鉴于这些文件:

{ number: '2123' } // let's call this one A 
{ number: '21' } // and this one B 
{ number: 'A2123' } // and this one C 
{ number: '01' } // and this one D 

如果我与术语21搜索我想要得到ABC。但在第一位B。为什么?因为B完美匹配。你看?它不是完全按照相关性排序,而是将完美匹配(最多只有1个完美匹配)移至第一个位置。

我试过text indexes但他们不匹配2123与搜索项21。 (我明白为什么,那很好)

那么究竟是我的问题?我可以正则表达式搜索并发布那个游标,但是它会有太多的文档。我可以限制它,但没有排序,我可能会失去绝对需要的完美比赛。

所以最后我无法自定义排序。然后我有这样的想法:为什么我的游标(未排序和无限)fetch(),排序和限制获取的数组,并基于该排序的数组创建一个“人造”游标。我没有找到实现这个目标的方法。

+0

你为什么要使用流星? – phortx

回答

2

这是一个有点hackish的想法:

  1. 订阅两个不同的出版物,exactMatchesallMatches
  2. exactMatches只能精确匹配,限制返回到您的计数
  3. allMatches将返回所有比赛,也限于你的数量

现在在客户端你可以.find().fetch()在收集和重新排列在那里以优化的顺序。 (a)保证你看到所有完全匹配,(b)最小化网络流量,(c)把排序负载放在客户端而不是你的服务器上。

想想吧,您也可以在部分匹配之前单独呈现精确匹配,因此您只需要对后者进行排序。在火焰中:

{{#each exactMatches}} 
    {{> result}} 
{{/each}} 
{{#each partialMatches}} 
    {{>result}} 
{{/each}} 
+0

有同样的想法,但希望流星会给我更多的不可思议的可能性。仍然感谢您的时间和确认,这是我的路要走。 – Fabic