2016-09-14 88 views
1

我有一个与我的MongoDB查询问题,我需要在我的领域内搜索,只从单词的开始搜索不是100%匹配的单词。MongoDB全文搜索取词开始

之前这个问题打我,我用$regex和这里它没有问题,唯一的问题是它的很多慢,然后$text搜索,所以现在我希望有一个可以帮助我。

这是我的查询今天

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} 
]) 

,我有我尝试过,说我之前已经使用$正则表达式,但在这里它无法用任何一种指标,然后在MongoDB的查询是如此缓慢,什么每个查询都会有0.4秒和0.03秒之间的差异。

所以如果有一个可以向我解释最新情况以及解决方案是什么以及为什么它会帮助我很多。

现在它的“匹配100%三星和evo”这个词我想要的是我可以键入像山姆和evo然后它找到一切有evo并开始与山姆它将使搜索更快的用户。

感谢您的帮助。

回答

1

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

  • 当插入文档,添加另一个field而将其归类文档(这是更相关的数据库设计)。这将允许使用text轻松搜索。
  • 切换到elasticsearch(不一定是可行的,取决于你的项目的阶段)
+0

如何使用elasticsearch在MongoDB中?它的声音很有趣。 – ParisNakitaKejser

+0

@ParisNakitaKejser'Elasticsearch'是一个搜索引擎文档商店,您不会在*'MongoDB'中使用*。检查这个[页面](https://www.elastic.co/products/elasticsearch)。此外[wiki](https://en.wikipedia.org/wiki/Elasticsearch)。 –