简短的一句:我需要正则表达式搜索集合,将完美匹配移动到结果的第一个位置,然后限制结果。
长篇:
在出版物中,我需要自定义我的结果,然后(当然在排序后)限制它。
我的自定义排序类似于按相关性排序,但不完全是。鉴于这些文件:
{ 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
这个词进行搜索,我想得到A
,B
和C
。但是在第一个位置B
。为什么?因为B
匹配完美。你看?它并不完全按照相关性排序,而是将完美匹配(最多只有1个完美匹配)移动到第一个位置。
我尝试text indexes
但是2123
与搜索字词21
不匹配。 (我理解为什么,那很好)
那究竟是什么问题?我可以正则表达式搜索并发布该光标,但它会有太多文档。我可以限制它但没有排序我可能会失去我绝对需要的完美匹配。
所以最后我无法自定义排序。然后我有了这个想法:为什么我fetch()
我的光标(未分类和无限制),排序和限制获取的数组并基于该排序的数组创建一个“人工”光标。我找不到实现这一目标的方法。
答案 0 :(得分:2)
这是一个有点黑客的想法:
exactMatches
和allMatches
exactMatches
应仅返回完全匹配,仅限于您的点数allMatches
会返回所有匹配,也仅限于您的点数现在,在客户端上,您可以.find().fetch()
对该集合进行排序,并按优化顺序重新排列。
这种方法可以(a)保证您看到所有完全匹配,(b)最小化网络流量,(c)将排序负载放在客户端而不是服务器上。
想想看,你也可以在部分匹配之前单独渲染完全匹配,所以你只需要对后者进行排序。大火:
{{#each exactMatches}}
{{> result}}
{{/each}}
{{#each partialMatches}}
{{>result}}
{{/each}}