PostgreSQL多维数组搜索

时间:2010-05-26 11:13:23

标签: arrays postgresql multidimensional-array

我是Postgresql的新手,正在尝试使用它。

我创建了一个简单的表格:

CREATE table items_tags ( 
ut_id SERIAL Primary KEY,       
item_id integer,   
item_tags_weights text[]  
);                                

其中: item_id - 与这些标签关联的项目ID item_tags_weights - 与Itm相关的标签,包括重量

Example entry:
--------------------
  ut_id  | item_id |                                                                                  item_tags_weights  
---------+---------+-------------------------------------------------------------------------------------------------------------------------------
       3 |       2 | {{D,1},{B,9},{W,3},{R,18},{F,9},{L,15},{G,12},{T,17},{0,3},{I,7},{E,14},{S,2},{O,5},{M,4},{V,3},{H,2},{X,14},{Q,9},{U,6},{P,16},{N,11},{J,1},{A,12},{Y,15},{C,15},{K,4},{Z,17}}
 1000003 |       3 | {{Q,4},{T,19},{P,15},{M,14},{O,20},{S,3},{0,6},{Z,6},{F,4},{U,13},{E,18},{B,14},{V,14},{X,10},{K,18},{N,17},{R,14},{J,12},{L,15},{Y,3},{D,20},{I,18},{H,20},{W,15},{G,7},{A,11},{C,14}}
       4 |       4 | {{Q,2},{W,7},{A,6},{T,19},{P,8},{E,10},{Y,19},{N,11},{Z,13},{U,19},{J,3},{O,1},{C,2},{L,7},{V,2},{H,12},{G,19},{K,15},{D,7},{B,4},{M,9},{X,6},{R,14},{0,9},{I,10},{F,12},{S,11}}
       5 |       5 | {{M,9},{B,3},{I,6},{L,12},{J,2},{Y,7},{K,17},{W,6},{R,7},{V,1},{0,12},{N,13},{Q,2},{G,14},{C,2},{S,6},{O,19},{P,19},{F,4},{U,11},{Z,17},{T,3},{E,10},{D,2},{X,18},{H,2},{A,2}}
(4 rows)

其中: {D,1} - D =标签,1 =标签重量

好吧,我只是想根据标签权重列出items_id where tags ='U'。

在途中是从数据库中选择 ALL 标签,并使用排序和高级语言进行处理并使用结果集。

为此,我可以执行以下操作:

1)SELECT * FROM user_tags WHERE 'X' = ANY (interest_tags_weights)

2)提取并排序信息并显示。

但考虑到多个项目可以与单个“TAG”相关联,并假设 1000万入门,这种方法肯定会迟钝。

根据需要使用CREATE函数列出任何想法吗?

任何指针都会有所帮助。

非常感谢。

1 个答案:

答案 0 :(得分:1)

您是否考虑过规范化,即将数组字段移动到另一个表中?除了易于查询和扩展外,它还可能在更大的数据库上具有更好的性能。