Mongodb 正则表达式查询

标签 mongodb indexing pymongo

我使用 Mongodb 存储世界各地的位置列表,记录超过 200 万条。每条记录都是这样的对象:

{ "_id" : ObjectId("4e5b339feee76320ab26f930"), "city" : "New York", "longitude" : -87.2008333, "latitude" : 30.8383333, "country_code" : "US", "country_name" : "United States" }

我想执行搜索以找出所有包含“纽约”的“CITIES”,我花了大约 10 秒才得到结果(这在我的网络系统中是 Not Acceptable )。我已经使用 ensureIndex() 函数为“城市”编制了索引,但查询速度仍然很慢。

这是我的查询:

db.locations.find({"city": { "$regex": "(New York)", "$options": 'i' }})

我猜问题出在“正则表达式”上。您能否建议我一个解决方案,以便在 2-3 秒内获得查询结果(我在 MySQL 中有超过 4M 条记录,类似的查询只用了 1-2 秒 - 使用索引)。

感谢和问候。

最佳答案

如果不使用正则表达式或 javascript,则无法在 mongodb 中使用包含操作进行搜索(它们很慢,因为没有索引)。

我可以建议以小写形式存储其他城市并通过完全匹配进行搜索。如果您想要“包含”和更快的速度,您应该使用其他一些全文搜索引擎,例如 solrlucene .

关于Mongodb 正则表达式查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7228018/

相关文章:

mongodb - $orderby 和 $maxScan 查询修饰符与 sort() 和 limit() shell 方法的行为

mongodb - 在 MongoDB 中,将帖子的所有评论保存在一个文档中是否可行?

Python - 重新索引每月值

python - 返回字段值为 1 或 3 的文档

python - 带有 python 的 mongo gridfs

javascript - 在这种特殊情况下,$and 和 $all 之间有什么区别?

node.js - 合并聚合并在 MongoDB 中查找结果

c# - 哪个过滤器可以更快地搜索 LDAP 中的所有用户?

python - 为什么你可以将列表切片超过总索引计数,但不能直接检索所述索引?

python - 我需要在 mongodb 中关闭连接吗?