MongoDB全文搜索开始这个词

时间:2016-09-14 06:05:02

标签: mongodb mongodb-query

我的MongoDB查询存在问题,我需要在我的字段内搜索,只搜索单词的开头不是100%匹配的单词。

在此问题出现之前,我使用$regex,这里没有问题,唯一的问题是它比$text搜索速度慢很多,所以现在我希望有一个可以帮助我。< / p>

这是我今天的查询

db.getCollection('product').aggregate([
   {$match : {$text: { $search : "\"samsung\" \"evo\" } } },
   {$project: { _id: 0, Category: 1 } },
   {$unwind: "$Category" },
   {$group: { _id: '$Category', count: { $sum: 1 } } },
   {$project: { _id: 0,Category: "$_id", count: 1 } },
   {$sort: { 'count': -1 } },
   {$limit: 5}
])

和我试过的,因为我说我之前使用过$ regex,但是这里它没有使用任何类型的索引,然后MongoDB中的查询是如此缓慢而且一切都卡在不同之处,如0.4秒vs 0.03秒查询。

所以,如果有一个可以向我解释发生了什么,解决方案是什么以及为什么它会对我有很大的帮助。

现在这个词是&#34;匹配100%三星和evo&#34;我想要的是我可以输入类似sam和evo然后它找到所有有evo的东西并从sam开始它将使搜索更快地为用户。

感谢所有人的帮助。

1 个答案:

答案 0 :(得分:1)

Regex或正则表达式总是比文本搜索慢。可能的解决方案是:

  • 插入文档时,添加另一个field,在插入时对文档进行分类。(这与数据库设计更相关)。这样可以使用text轻松搜索。
  • 切换到elasticsearch(这可能不太可行,取决于项目的阶段)