django - 在弹性搜索上搜索和过滤与在弹性搜索上搜索和在 postgres 上过滤
问题描述
我们在堆栈中同时使用 elasticsearch 和 postgres。我的领导认为最好在 elasticsearch 上执行文本搜索并获取命中的 id。然后,触发“IN”查询并在 postgres 上进行过滤。例如:-
a = es.search({params})//返回一个id列表(pks) b = Dummy.objects.filter(id__in=a).filter({params})
我相信当我们可以在elasticsearch上做所有事情时,它是不必要的。哪种方法会更快?
编辑:更多细节。
这基本上是一个供用户使用的文件库。我们将文件存储在我们的 S3 存储桶中。我们计划将文件名、s3prefix、格式、元数据等文件详细信息存储在 es 上。还有其他字段,例如 date_modified、date_created、owner、file_size。我们希望用户能够对这些参数进行排序和过滤。由于这是一个新产品,因此只有少数用户。最大 10-20 并且没有条目应该以千计。但是,这些数字可能会增长得非常快。
解决方案
如果您可以在 elasticsearch 中存储与响应相关的所有数据,那么在 postgres 中进行第二跳是多余的,因为 ES 可以保存和检索所有正确的文档,包括所需的所有过滤器。
另一方面,如果 postgres db 包含一些信息,这些信息是 ES 中数据之上的附加层,则需要对 postgres 进行第二次查询。这种设置的原因可能是一些数据在 ES 中是相当“静态”的,而 postgres 数据具有动态特性,有许多变化和更新。
所以,这两种选择都可以。这一切都取决于数据以及数据如何存储在两个数据库中。对 postgres 进行第二次查询会引入额外的延迟,但在良好的设置下这可能非常小,并且不会被用户注意到。
推荐阅读
- c++ - 是否可以在 RTL 中进行控制台输出(从右到左)?
- proxy - 为什么我的一些网站在学校被封锁以及如何解除封锁?
- c++ - 解决难题(最佳解决方案)
- c++ - 通过函数声明后的C++初始化向量
- android - Kotlin:如何使用 subSequence 过滤字符串列表,并且不过滤掉长度小于 subSequence 要求的字符串?
- java - 每次请求后如何将对象添加到模型中(Spring Boot)
- react-native - 传递给自定义标头组件的道具未定义
- openssl - 是否有检查 .p8 证书有效性的 OpenSSL 命令
- python - 使用 iloc() 根据范围和单个整数选择列
- javascript - React 钩子 console.log 和接口