PostgreSQL tsvector解析包括搜索中的xml标记

时间:2013-04-15 02:19:14

标签: postgresql indexing gin tsvector

我们存储"破坏"表中文本字段中的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; = ,. /?之一? 提前谢谢

1 个答案:

答案 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');