使用数组搜索Postgres数组

时间:2016-08-14 20:39:02

标签: javascript sql arrays json postgresql

我想在一个功能中添加主题标签,我只想将它们存储为每个对象的数组,然后让用户使用自己的标签(一组标签)搜索项目。然后执行搜索。有没有办法做到这一点?

例如: 数据库中的标签:

row 1: ['red', 'blue', green']
row 2: ['orange', 'blue']
row 3: ['blue', 'green']

然后用户搜索会像:

['red', 'green']

,结果将是第1行和第3行。

这是一种非常缓慢且低效的存储方式吗?如果我以这种方式为用户提供多种搜索选项,我将如何获得最佳性能?

1 个答案:

答案 0 :(得分:1)

以下是两种方法:

  1. 按照建议使用Postgres数组。这使您的行易于阅读且非常简单。它还允许您根据需要对标签进行排序,而无需单独存储索引。如果你走这条路线,你应该使用&& operator来确定搜索标签是否与其他标签重叠(例如,与在循环中运行查询相反)。
  2. 使用单独的表存储对象标记关联。在这样的表中,一列是tag(如果您想稍后修改标签元数据,则为tag_id),另一列是与标签关联的object_id。您可以拥有与同一对象关联的多个标记,以及与同一标记关联的多个对象。然后,您可以在此表上使用标准joinin filter来获取与您请求的标记匹配的所有对象ID。这是不支持数组的数据库管理系统通常使用的方法。