2013-04-15 17 views
3

我們在表格的文本字段中存儲「broken」xml。修正xml目前不可能,因此正常使用模式是在where子句中使用〜* E'my_regex'來搜索它。挑戰是桌子的大小非常大。Posgresql tsvector parse在搜索中包含xml標籤

我正在嘗試使用杜松子酒索引來加快查詢速度。問題是,解析文本到tsvector時,解析器會忽略xml標記。
例如,我正在查找包含單詞「file」的記錄。這個詞可能是xml標籤的一部分,或者不是標籤的一部分。 這是我的嘗試:

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

我在做什麼錯?我如何指定分隔符爲<> & =,。/? 預先感謝您

+0

你可能需要做一個粗略的在將值提交到'to_tsvector'或(更大的作業)之前,將標記條寫入自定義的tsearch2分析器。 –

回答

1

如果你只在搜索詞/標記名等,然後使用正則表達式創建的tsvector時刪除所有標記intereseted:

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