我有一个 MongoDB 集合,其中包含不同网站的大约 2 亿个条目。这些文件的结构如下:
{
"_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 和 32GB 内存上运行它。
我做错了什么?或者说 MongoDB 不是为这种任务而设计的?
已解决:只需为域创建一个单独的字段即可。我使用 python 的 tldextract 提取它。 这样就快多了。