因此,有一个Web服务器有许多方法,用于自动完成客户端上的输入字段。方法接受一个字符串并使用regexp扫描mongodb集合的特定属性。
很常见的东西,对吗?但这是一个问题 - 这些方法需要根据搜索字符串与结果字符串开头的接近程度对结果进行排序。就像我搜索国家并输入“ru”一样,“俄罗斯”应该出现在“秘鲁”之前。
我没有看到如何在不执行多次搜索的情况下对这样的结果进行排序。现在我只能想到这样的事情
const limit = 20;
const resultsStartOfLine = db.countries.find({name: /^ru/i})
.limit(limit)
.toArray();
const resultsRest = db.countries.find({
name: /ru/i,
_id: {$nin: _.map(resultsStartOfLine, '_id')}
})
.limit(limit - resultsStartOfLine.length)
.toArray();
我知道,默认情况下Mongo不能做这种排序,但也许有更好的方法呢?
正如我所知,通过正则表达式进行搜索通常是一种不好的做法,因为它不使用索引,因此速度很慢。所以我创建了一个全文搜索索引,并按权重排序结果。