在Elasticsearch上搜索和过滤与在Postgres上搜索ElasticSearch和过滤

时间:2019-02-18 06:42:40

标签: django postgresql elasticsearch

我们在堆栈中同时使用了elasticsearch和postgres。我的负责人认为,最好在elasticsearch上执行文本搜索并获取匹配的ID。然后,触发“ IN”查询并在postgres上进行过滤。 例如:-

a = es.search({params})//returns a list of ids(pks)
b = Dummy.objects.filter(id__in=a).filter({params})

我相信,当我们可以在Elasticsearch上完成所有工作时,这是不必要的。哪种方法会更快?

编辑:更多详细信息。

这基本上是用户的文件库。我们将文件存储在S3存储桶中。我们计划在es上存储文件详细信息,例如文件名,s3prefix,格式,元数据。还有其他字段,例如date_modified,date_created,所有者,file_size。我们希望用户能够对这些参数进行排序和过滤。由于这是一个新产品,因此只有几个用户。最大10-20而且,任何条目都不应该成千上万。但是,这些数字可以快速增长。

1 个答案:

答案 0 :(得分:0)

如果您可以在elasticsearch中存储与响应相关的所有数据,则在postgres中进行第二步是多余的,因为ES可以保存和检索所有正确的文档,包括所需的所有过滤器。

另一方面,如果postgres db包含一些信息,这些信息是ES中数据之上的附加层,则需要对postgres进行第二次查询。进行此设置的原因可能是ES中的某些数据非常“静态”,而postgres数据具有许多更改和更新的动态性质。

因此,这两个选项均有效。这一切都取决于数据以及如何将其存储在两个DB中。对postgres进行第二次查询会引入额外的延迟,但是在良好的设置下这可能会很小,并且不会被用户注意到。

相关问题