对于我的论文,我目前正在调查Elasticsearch和MongoDB的速度(低至毫秒)。
我注意到,与MongoDB相比,Elasticsearch在返回数据的速度和找到的总项目方面非常一致。如果其他MongoDB需要更长的时间来返回数据,则会发现更多的结果,无论发送的请求总数如何,Elasticsearch的响应时间几乎总是相同的。
我的假设是,在Elasticsearch中,当使用size运算符时,在索引中搜索完成后实际查找和检索的文档数量正好是size运算符中设置的数量。在MongoDB中不是这种情况,在MongoDB中,检索索引中匹配的所有文档,并且最终只有前X个量基于游标的batch_size返回给客户端,最终返回max limit()已经确定了。
我没有办法,除了花几个小时查看源代码,弄清楚这个假设是否正确,或者是否还有其他事情,我一定错过了。
感谢您花时间阅读本文,感谢所有回复,并将帮助我进一步研究。
答案 0 :(得分:1)
为了让Elasticsearch实际检索结果更加清晰:它使用query then fetch。
因此,如果您搜索N个结果,第一个阶段将查询所涉及的所有分片,并返回包含分数和ID的N个结果列表 - 而不是其他信息。在第二阶段,您按ID获取前N个全局结果。因此,您将检索比您需要的更多分数和ID,但您只会获取实际结果。