У меня есть запрос, который может быть слишком сложным для MongoDB для его быстрого выполнения. Если есть вещи, которые я могу изменить в настройке моего MongoDB, я бы хотел узнать!Ускорение запроса MongoDB с Regex
Ниже приведен пример запроса, который является поиск коллекции рабочих мест для термина «API»
db.jobs.find(
{
'budget': {'$exists': true, '$ne': ''},
'$or': [
{'title': /(^|[\\s.,])api.*/gi},
{'query': /api'/gi},
{'description': /(^|[\\s.,])api.*/gi}
]
}
)
Это заканчивается, принимая более 3 секунд, чтобы перебежать 32000 документов (выдержка из MongoDB Profiler):
"ntoreturn" : 0,
"ntoskip" : 0,
"nscanned" : 0,
"nscannedObjects" : 34266,
"keyUpdates" : 0,
"writeConflicts" : 0,
"numYield" : 274,
Я думал о добавлении индекса по любому типу, запросу, описанию, но MongoDB разрешает только один текстовый индекс на коллекцию, в то время как у меня есть три строковых поля (название, запрос, описание), которые я запрашиваю.
Вы можете заменить чередование на '\ b'? также вы должны отменить его '[\ s.,] | ^' скорее всего, так как первый случай должен быть самым обычным. – sweaver2112
вы можете создать текстовый индекс по любому числу полей. 'db.jobs.createIndex ( { title:" text ", query:" text ", description:" text " } )'. Попробуйте и посмотрите, улучшит ли ваше время ответа на запрос. – Veeram
IMO, вам нужно просмотреть свои регулярные выражения. И [связанный вопрос] (http://stackoverflow.com/q/17501798/4519059);). –