javascript - 当查询结果需要在发送到客户端之前进行操作时,如何从 Mongodb 快速访问大量数据
问题描述
我有一个基于 React 的前端和基于 Node 的后端的 Mongodb 数据库,集合中大约有 100000 个文档。我已经完成了索引,并且已经在使用 Redis。我已经实现了一个搜索功能来查找所有具有包含搜索查询的“标题”属性的相关文档并将它们显示给用户。我还使用分页显示每页 20 个结果,并且用户可以对结果应用各种过滤器。
到目前为止,我所做的是当用户搜索某些内容时,会在数据库上执行文本搜索。然后根据搜索查询的相关性对所有搜索结果进行评分,并将它们按评分顺序排序并返回给客户端。然后,当页面更改或应用过滤器时,更改仅发生在 javascript 前端。大约 9000 个结果意味着大约 11 MB 的数据需要大量时间从后端发送。
我可以做的一件事是每次搜索都从数据库中检索所有数据并对它们进行评分并根据分数对其进行排序并仅返回 20 个结果以显示在第一页上,但每次更改页面或应用过滤器时,我将不得不再次完成完整的事情,这将花费很长时间来完成像过滤这样简单的事情。
我想知道如何才能在客户端更快地获取数据,同时又不影响过滤和更改页面的速度。
也欢迎提出额外或不同技术堆栈的建议。谢谢你。
解决方案
看起来这一切都可以使用 elasticsearch 轻松解决。不要在客户端做任何事情。elasticsearch 可以在几分之一毫秒内轻松处理所有复杂查询。
推荐阅读
- java - .getChildren().add() 需要一个节点并且无法添加我的对象
- javascript - 想从 javascript 文件中调用 php 文件
- python - “如何从 Pandas Dataframe 的单列中提取定期数据”
- java - JPanel 有时不响应鼠标点击
- c# - 多个类的 Nunit 范围报告未正确报告
- python - 从 Power BI 服务中的 Matplotlib 图中消除空白边距
- php - 尝试基于 prod_category 和 cat_name 加入产品表和类别表
- javascript - 有什么方法可以从子组件中获取父组件中 v-model 的变量名
- element-ui - 为什么在 popper.js 中单击外部时弹出窗口不关闭?
- twig - 如何在 Twig 中的 for 循环内切碎