Postgresql

PostgreSQL:索引觸發器/掛鉤?對於同義詞

  • September 14, 2017

在 PostgreSQL 中,是否可以在數據進入全文索引之前添加觸發器來修改數據?

PostgreSQL 需要使用文件來為停用詞、同義詞等添加自定義詞典。但是,在大多數託管數據庫託管文件訪問是不允許的。最好的辦法是,如果我可以使用表格(例如間隔的單列或雙列)而不是文件字典來提供同義詞、停用詞等列表,但經過大量搜尋後,它不會出現可能的。

我嘗試查看的另一條路徑是使用同義詞填充表,然後將其導出到文件系統,但是 PostgreSQL 需要文件的完整路徑。在託管主機上,如果您不知道開始的路徑,則無法提供完整路徑。

所以現在我想看看是否有某種方法可以“掛鉤”到預索引過程中,並在將數據添加到索引之前自己修改數據。請注意,我考慮過使用觸發器並直接修改數據,但這也會修改進入儲存行欄位的數據——這是我不想做的。我正在尋找的是一種在對資訊進行索引之前修改資訊時保持原始數據/欄位完整併輸入欄位的方法。我曾考慮在帶有修改後的數據的表中添加一個額外的列,但是這可能會變得非常混亂,並且可能需要大量額外的列來儲存更大的數據集。另一種選擇是使用物化視圖或繼承/子表,但同樣,這將是一個混亂且難以管理的結果。

TLDR:我想問是否有任何可行的方法來定義停用詞、同義詞等,而不必使用文件(以便它可以在不提供文件訪問的託管系統上使用)?

都是預處理。PostgreSQL 可以做到這一點。你可以做你的。

CREATE INDEX ON myTable 
 USING gin ( myTransform(x) );

SELECT *
FROM myTable
WHERE 'foo & bar' @@ myTransform(x);

運動留給OP,

CREATE FUNCTION myTransform ( x string )
RETURNS tsvector AS $$
 BEGIN
   -- modify x
   RETURN x::tsvector;
 END;
$$ LANGUAGE plpgsql
IMMUTABLE;

引用自:https://dba.stackexchange.com/questions/185987