我们存储"破坏"表中文本字段中的xml。目前无法修复xml,因此正常使用模式是使用〜* E' my_regex'来搜索它。在where子句中。挑战在于桌子的大小非常大。
我正在尝试使用gin索引来更快地进行查询。问题是,在将文本解析为tsvector时,解析器会忽略xml标记 例如,我正在寻找包含单词" file"的记录。该单词可以是xml标记的一部分,也可以不是标记的一部分。 这就是我试过的:
select to_tsvector ( 'simple', '<file mode="blah"><value>bar</value>' ) @@ to_tsquery('simple','file');
?column?
f
我做错了什么?如何将分隔符指定为&lt;&gt;&amp; = ,. /?之一? 提前谢谢
答案 0 :(得分:1)
如果您只对搜索单词/标记名等感兴趣,请在创建tsvector时使用正则表达式删除所有标记:
select to_tsvector( 'simple',
regexp_replace('<file mode="blah"><value>bar</value>', E'[^A-Za-z0-9]', ' ', 'g')
) @@ to_tsquery('simple','file');