簡體   English   中英

Gin索引以及PostgreSQL中gin_trgm_ops和to_tsvector之間的差異

[英]Gin index and difference between gin_trgm_ops and to_tsvector in PostgreSQL

我試圖了解如何在PostgreSQL中使用gin索引進行全文搜索。 而且我看到有兩種方法可以做到這一點。 例如,如果我們有一個表:

CREATE TABLE IF NOT EXISTS users (
    id SERIAL NOT NULL,
    name VARCHAR(512) NOT NULL,
    PRIMARY KEY (id));

然后,我們可以使用以下變體創建索引:

CREATE INDEX users_name_idx ON users USING gin (name gin_trgm_ops);

要么

CREATE INDEX users_name_idx ON users USING gin (to_tsvector('language', name));

據我了解(我可能是錯的),第一個變體將文本分為三個字母標記,並且不依賴於語言。 第二種變體使用詞干來返回詞根列表,這就是為什么要依賴語言的原因。

我的問題是-我的理解是正確的,在什么情況下應使用第一種變體,在什么情況下應使用第二種變體。

你說的是對的。

除此之外,也許是最重要的區別,全文搜索只能搜索整個單詞,而三字母組合索引可以用於搜索任意子字符串,還可以找到僅與搜索條件相似的結果(使用距離)運營商)。

毫不奇怪,對於較短的搜索字符串,trigram索引的效果不佳。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM