2017-01-13 43 views
0

我有一个查询可能太复杂,MongoDB无法快速执行它。如果有什么我可以改变我的MongoDB的设置,我很想知道!使用正则表达式加速MongoDB查询

下面是一个例子查询是搜索工作集合了“API”一词

db.jobs.find(
    { 
    'budget': {'$exists': true, '$ne': ''}, 
    '$or': [ 
     {'title': /(^|[\\s.,])api.*/gi}, 
     {'query': /api'/gi}, 
     {'description': /(^|[\\s.,])api.*/gi} 
    ] 
    } 
) 

这最终以超过3秒跨越32000个文档(摘自MongoDB的探查器)运行:

"ntoreturn" : 0, 
"ntoskip" : 0, 
"nscanned" : 0, 
"nscannedObjects" : 34266, 
"keyUpdates" : 0, 
"writeConflicts" : 0, 
"numYield" : 274, 

我在考虑在标题,查询,描述中添加一个索引,但是MongoDB只允许每个集合有一个文本索引,而我有三个我正在查询的字符串字段(标题,查询,描述)。

+0

你可以用'\ b'替换替换吗?你也应该反过来''\ s。,] | ^',因为第一种情况应该是最常见的情况。 – sweaver2112

+2

您可以在任意数量的字段上创建文本索引。 'db.jobs.createIndex( { title:“text”, query:“text”,description:“text” } )''。尝试看看它是否改善了您的查询响应时间。 – Veeram

+1

IMO,您需要检查您的Regexes。和[相关的问题](http://stackoverflow.com/q/17501798/4519059);)。 –

回答

0

解决方案是基于3个字段创建文本索引。我不知道Mongo允许你为每个文本索引使用多个字段。现在超级快!