2011-05-29 54 views
12

我在PostgreSQL中設置了一個新的文本搜索配置。該配置使用空停止詞文件DictFile和AffFile。PostgreSQL tsvector配置:如何允許特殊字符?

一個簡單的測試......

SELECT * 
    FROM ts_debug('public.myconfig', 'C++ and C# and PHP'); 

...作品(幾乎)除了一個事實,即 'C++' 和 'C#' 的詞位都是 'C' 的罰款。基本上,我所要做的就是確保'C++'的詞法是'C++',而'C#'的詞法是'C#',因此用戶可以查詢'C++'。

回答

4

問題是雙重的。

  1. 第一個問題是索引編制。默認配置使用stemming來索引數據,因此您可以爲'C++'和'C#'獲取詞法C。您可以使用'簡單'配置來索引數據,但最終會在索引中產生不需要的詞。我所做的是將'C++'轉換爲'Cplusplus'並對其進行索引。由於'Cplusplus'沒有語法,它將會像現在這樣被隱藏起來。你可以通過在索引數據中做'CSharp'來做'C#'。

  2. 第二個問題是搜索。現在索引數據沒問題,我們需要確保我們將特殊詞的搜索詞轉換。如果用戶輸入「C++」,你需要將其轉換爲‘執行搜索之前CPLUSPLUS’。

我創建上參加了一個字符串的DB函數和轉換的特殊條款出現的所有

我在一段時間內沒有使用TSearch,所以我不確定TSearch是否允許您設置和例外列表,它允許使用停用詞的相同方式。