2017-01-13 44 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允許你爲每個文本索引使用多個字段。現在超級快!