2009-12-30 57 views
5

我有一個包含序列,如radio/tested,我想在查詢返回的命中像禁用的PostgreSQL 8.4的tsvector解析器的`file`令牌類型

select * from doc 
where to_tsvector('english',body) @@ to_tsvector('english','radio') 

不幸的是一些文件,默認解析器需要radio/tested作爲file令牌(儘管處於Windows環境中),所以它不符合上述查詢。當我在其上運行ts_debug時,那是當我看到它被識別爲一個文件,並且該詞位最終爲radio/tested而不是兩個詞位radiotest

有什麼辦法可以配置解析器不尋找file令牌嗎?我試圖

ALTER TEXT SEARCH CONFIGURATION public.english 
    DROP MAPPING FOR file; 

...但它並沒有改變的ts_debug輸出。如果有某種方法可以禁用file,或者至少可以識別file以及它認爲沿途構成目錄名稱的所有單詞,或者有辦法將其作爲連字符或空格對待斜線(不帶他們自己的性能會受到影響),這會非常有幫助。

回答

5

我覺得做你想要什麼的唯一方法是創建自己的解析器:-(複製wparser_def.c到一個新的文件,從剖析表中刪除(actionTPS_Base和它後面的那些),涉及到的條目文件(TPS_InFileFirstTPS_InFileNext等),你應該設置。我認爲主要的困難是使得該模塊符合PostgreSQL的公司的C成語(PG_FUNCTION_INFO_V1等)。看一看contrib/test_parser/的一個例子。

+0

哦,天哪。 ..很不幸。謝謝你的回答和提示,我很高興知道它涉及到什麼。 – Kev 2010-01-13 19:27:02