当我在 mongo 中进行查询时,我的数据库中有大约200 万个文档,如下所示:
db.collection.ensure_index("location")
db.collection.find({"location.name": {"$regex": 'norway', "$option": 'i'}}, {"_id:0", 'userid': 1, 'username': 1})
用于位置搜索的 mongo 文档示例:
Mongodb document: {"location": {id:3235726, name: Oslo, Norway }}
在索引中我没有指定cache_time部分,它使用默认值。现在,它会在2 或 4 秒后显示数据,这非常糟糕,最糟糕的是,当它没有找到任何位置时,搜索操作大约需要 25 秒。我使用 python time.time()方法映射了这个时间。然后我只对 100 个文档的查询设置了一个限制(),然后它工作得很好。但是,如果我在那里设置限制,对我来说有什么用例,在搜索时使用skip()非常广泛。
另一方面,如果我使用用户 ID 搜索数据,它不包含正则表达式类型查询:
db.collection.ensure_index("userid")
db.collection.find({"userid": 1213444}, {"_id:0", 'user_rank': 1, 'username': 1})
它的工作效率非常高,因为 id 是整数并且非常快。唯一的区别是我在带有正则表达式的位置查询部分使用' like '查询,而我研究过 mongo docs正则表达式在性能方面还不错。
我应该去增加我的服务器上的物理内存,目前是 1.5G,以便有效地使用索引,还是使用Apache Solr搜索引擎,它通过 mongo_connector 索引我所有的 mongo 文档并将数据从 mongodb 同步到 solr(将数据直接索引到 solr 在记忆方面)?
我试图把所有的努力都放在我的问题陈述中,如果我的问题陈述有任何问题,请告诉我,我会尽力改进它。
编辑:我应该使用 mongo 进行弹性搜索吗?因为有索引或无索引搜索结果太慢,比如最大时间显示260ms太高了