3

我们将“损坏的”xml 存储在表格的文本字段中。目前无法修复 xml,因此正常的使用模式是在 where 子句中使用 ~* E'my_regex' 来搜索它。挑战在于桌子的尺寸非常非常大。

我正在尝试使用 gin 索引来加快查询速度。问题是在将文本解析为 tsvector 时,解析器会忽略 xml 标签。
例如,我正在寻找包含单词“file”的记录。该词可能是 xml 标签的一部分,也可能不是标签的一部分。这是我尝试过的:

select to_tsvector ( 'simple', '<file mode="blah"><value>bar</value>' ) @@ to_tsquery('simple','file');  
?column?  
f

我究竟做错了什么?如何将分隔符指定为 <>&=,./ 之一?先感谢您

4

1 回答 1

1

如果您只对搜索单词/标记名等感兴趣,那么在创建 tsvector 时使用正则表达式删除所有标记:

select to_tsvector( 'simple', 
    regexp_replace('<file mode="blah"><value>bar</value>', E'[^A-Za-z0-9]', ' ', 'g')
) @@ to_tsquery('simple','file');
于 2013-04-15T08:40:57.627 回答