PostgreSQL tsvector解析在搜索中包含xml标记

PostgreSQL tsvector解析在搜索中包含xml标记,postgresql,indexing,gwt-gin,tsvector,Postgresql,Indexing,Gwt Gin,Tsvector,我们将“断开的”xml存储在表中的文本字段中。修复xml目前是不可能的,所以通常的使用模式是在where子句中使用~*E'my_regex'搜索xml。挑战在于桌子的大小非常大 我尝试使用gin索引来加快查询速度。问题在于,在将文本解析为tsvector时,解析器会忽略xml标记。 例如,我正在查找包含单词“file”的记录。这个词可以是xml标记的一部分,也可以不是标记的一部分。 这就是我所尝试的: select to_tsvector ( 'simple', '<file mode="

我们将“断开的”xml存储在表中的文本字段中。修复xml目前是不可能的,所以通常的使用模式是在where子句中使用~*E'my_regex'搜索xml。挑战在于桌子的大小非常大

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

select to_tsvector ( 'simple', '<file mode="blah"><value>bar</value>' ) @@ to_tsquery('simple','file');  
?column?  
f
select to_tsvector('simple','bar')@@to_tsquery('simple','file');
?专栏?
F
我做错了什么?如何将分隔符指定为&=,./?
提前感谢

如果您只对搜索单词/标记名等感兴趣,请在创建tsvector时使用regexp删除所有标记:

select to_tsvector( 'simple', 
    regexp_replace('<file mode="blah"><value>bar</value>', E'[^A-Za-z0-9]', ' ', 'g')
) @@ to_tsquery('simple','file');
select to_tsvector('simple',
regexp_替换('bar',E'[^A-Za-z0-9],'g')
)@@to_tsquery('simple','file');

在将值输入到
到_tsvector
或(更大的任务)编写自定义Tsarch2解析器之前,您可能需要做一个粗略的标记条。