我使用 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 中使用包含操作进行搜索(它们很慢,因为没有索引)。
我可以建议以小写形式存储其他城市并通过完全匹配进行搜索。如果您想要“包含”和更快的速度,您应该使用其他一些全文搜索引擎,例如 solr或 lucene .
关于Mongodb 正则表达式查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7228018/