使用包含XML标记的列在表上快速查询gin索引

时间:2015-05-14 12:10:17

标签: postgresql indexing gin tsvector

我有一个非常大的知识库(Yago2),其列具有XMl标签的形式,例如'<Albert_Einstein>'。性能在我的用例中非常重要,所以我创建了一个像这样的杜松子酒索引:

 create index col_idx on yagofacts using gin(to_tsvector('english', column_name));

现在我想用

查询它
select * from yagofacts where to_tsvector('english', column_name) @@ to_tsquery('Albert_Einstein'); 

但是,它不会返回任何结果,因为它无法在XML标记中进行搜索。 我看到了前一个问题的一个解决方案,我可以做到:

select to_tsvector( 'simple', regexp_replace(column_name, E'[^A-Za-z0-9]', ' ', 'g')) @@ to_tsquery('simple','Albert_Einstein');

问题是它没有良好的性能,因为它没有使用我创建的杜松子酒索引。我怎样才能快速查询?

1 个答案:

答案 0 :(得分:1)

我设法通过在:

上创建一个杜松子酒索引来解决这个问题
 create index no_xml_idx on yagofacts using gin(to_tsvector('simple', regexp_replace(column_name, E'[^A-Za-z0-9]', ' ', 'g')));