3

「壊れた」xml をテーブルのテキスト フィールドに格納します。xml を修正することは現在不可能であるため、通常の使用パターンは where 句で ~* E'my_regex' を使用して検索することです。課題は、テーブルのサイズが非常に大きいことです。

クエリを高速化するために gin インデックスを使用しようとしています。問題は、テキストを tsvector に解析する際に、パーサーが xml タグを無視することです。
たとえば、「ファイル」という単語を含むレコードを探しています。単語は、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 に答える