У меня есть коллекция MongoDB, содержащая около 200 миллионов записей для разных веб-сайтов. Документы имеют следующую структуру:
{
"_id": {
"$oid": "6647314adcfdad8dd8b1c84f"
},
"url": "http://example.com/login.php",
"name": "Jack"
}
У меня есть как обычный индекс, так и текстовый индекс в поле URL. Когда я пытаюсь найти субдомены для определенного домена, запрос почти никогда не завершается:
{
"url": {
$regex: "^http://([a-zA-Z0-9-]+\\.)*google\\.com"
}
}
Функция объяснения указывает, что мой индекс используется. Я также попытался упростить регулярное выражение для поиска простого шаблона http или https, но это также не улучшило производительность.
Единственный быстрый поиск — это точный поиск по домену:
{
"url": {
$regex: "^https://example.com"
}
}
Я запускаю его на Intel i5-12450H и 32 ГБ оперативной памяти.
Что я делаю не так? Или MongoDB не предназначен для такого рода задач?
Отвечает ли это на ваш вопрос? MongoDB, выполнение запроса по регулярному выражению по индексированным полям

Решение: Просто создайте отдельное поле для домена. Я извлекаю его, используя tldextract Python. Так гораздо быстрее.
Вы ожидаете чего-то еще, кроме
httpилиhttps? Я бы просто попробовал текстовый поиск{ $text: { $search: 'google.com' }}, а затем второй фильтр с регулярным выражением. Регулярное выражение, как правило, является медленной операцией.