日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

pg_bigm是云原生數據倉庫 AnalyticDB PostgreSQL 版支持的一款開源第三方插件,該插件提供了全文本搜索能力,允許用戶創建一個二元語法(2-gram)的GIN索引來加速搜索過程。

在pg_bigm插件中,從文本提取的Trigram長度為2,對于長度小于2的Trigram,將以空格前后綴填充得到最終的Trigram,并且默認只能包含一個空格前綴和一個空格后綴。示例如下:

postgres=> SELECT show_bigm('full text search');
show_bigm                            
------------------------------------------------------------------
 {" f"," s"," t",ar,ch,ea,ex,fu,"h ","l ",ll,rc,se,"t ",te,ul,xt}
(1 row)

注意事項

  • pg_bigm插件僅支持存儲彈性模式實例,并且內核版本須滿足以下條件:

    • AnalyticDB PostgreSQL 6.0版實例并且版本為v6.6.2.1及以上。

    • AnalyticDB PostgreSQL 7.0版實例并且版本為v7.0.6.1及以上。

  • 建立GIN索引的列長度不可以超過107,374,180字節(約102 MB),示例如下:

    postgres=> CREATE TABLE t1 (description text);
    CREATE TABLE
    
    postgres=> CREATE INDEX t1_idx ON t1 USING gin (description gin_bigm_ops);
    CREATE INDEX
    
    postgres=> INSERT INTO t1 SELECT repeat('A', 107374181);
    ERROR:OUT OF memory

    如果云原生數據倉庫 AnalyticDB PostgreSQL 版數據庫中存儲內容的語言不是ASCII,建議您將數據庫的編碼方式改為UTF-8。查詢當前數據庫編碼方式的命令如下:

    SELECT pg_encoding_to_char(encoding)
    FROM pg_database
    WHERE datname = current_database();

安裝插件

請您在云原生數據倉庫 AnalyticDB PostgreSQL 版實例插件管理中安裝pg_bigm插件。具體操作,請參見安裝、升級與卸載插件。

使用方法

創建索引

示例如下:

CREATE TABLE pg_tools (tool text, description text);

INSERT INTO pg_tools VALUES ('pg_hint_plan', 'Tool that allows a user to specify an optimizer HINT to PostgreSQL');
INSERT INTO pg_tools VALUES ('pg_dbms_stats', 'Tool that allows a user to stabilize planner statistics in PostgreSQL');
INSERT INTO pg_tools VALUES ('pg_bigm', 'Tool that provides 2-gram full text search capability in PostgreSQL');
INSERT INTO pg_tools VALUES ('pg_trgm', 'Tool that provides 3-gram full text search capability in PostgreSQL');

CREATE INDEX pg_tools_idx ON pg_tools USING gin (description gin_bigm_ops);
CREATE INDEX pg_tools_multi_idx ON pg_tools USING gin (tool gin_bigm_ops, description gin_bigm_ops) WITH (FASTUPDATE = off);

執行全文本搜索

您可以使用pg_bigm插件執行全文本搜索,示例如下:

postgres=> SELECT * FROM pg_tools WHERE description LIKE '%search%';
 tool   |  description
---------+---------------------------------------------------------------------
 pg_bigm | Tool that provides 2-gram FULL text SEARCH capability IN PostgreSQL
 pg_trgm | Tool that provides 3-gram FULL text SEARCH capability IN PostgreSQL
(2 ROWS)

相似性搜索

您可以使用=%操作符進行相似性搜索。示例如下:

postgres=> SET pg_bigm.similarity_limit TO 0.2;
SET
postgres=> SELECT tool FROM pg_tools WHERE tool =% 'bigm';
tool
---------
 pg_bigm
 pg_trgm
(2 ROWS)

插件常用函數

likequery函數

使用pg_bigm插件中的slikequery函數及%操作符生成可以被LIKE關鍵字識別的字符串。likequery函數的更多信息,請參見附錄。示例如下:

postgres=> SELECT likequery('pg_bigm has improved the full text search performance by 200%');
likequery
-------------------------------------------------------------------
 %pg\_bigm has improved the FULL text SEARCH performance BY 200\%%
(1 row)

postgres=> SELECT * FROM pg_tools WHERE description LIKE likequery('search');
 tool   | description
---------+---------------------------------------------------------------------
 pg_bigm | Tool that provides 2-gram FULL text SEARCH capability IN PostgreSQL
 pg_trgm | Tool that provides 3-gram FULL text SEARCH capability IN PostgreSQL
(2 ROWS)

show_bigm函數

使用pg_bigm插件中的show_bigm函數返回給定字符串的所有2-gram元素的集合。show_bigm函數的更多信息,請參見附錄。示例如下:

postgres=> SELECT show_bigm('full text search');
show_bigm
------------------------------------------------------------------
 {" f"," s"," t",ar,ch,ea,ex,fu,"h ","l ",ll,rc,se,"t ",te,ul,xt}
(1 ROW)

bigm_similarity函數

使用pg_bigm插件中的bigm_similarity函數計算兩個字符串的相似度。

重要
  • 計算 2-gram 時,會在字符串前后添加空格,因此需要注意以下內容:

    • ‘ABC’和 ‘B’的相似度為0。

    • ‘ABC' 和 ‘A’的相似度為0.25。

  • bigm_similarity函數大小寫敏感,例如 ‘ABC’和 ‘abc’的相似度為0。

示例如下:

postgres=> SELECT bigm_similarity('full text search', 'text similarity search');
 bigm_similarity
-----------------
 0.5714286
(1 ROW)

postgres=> SELECT bigm_similarity('ABC', 'A');
 bigm_similarity
-----------------
 0.25
(1 ROW)

postgres=> SELECT bigm_similarity('ABC', 'B');
 bigm_similarity
-----------------
 0
(1 ROW)

postgres=> SELECT bigm_similarity('ABC', 'abc');
 bigm_similarity
-----------------
 0
(1 ROW)

pg_gin_pending_stats 函數

使用pg_gin_pending_stats函數返回GIN索引待處理列表的頁面和元組的個數。示例如下:

postgres=> SELECT * FROM pg_gin_pending_stats('pg_tools_idx');
 pages | tuples
-------+--------
     0 |      0
(1 ROW)

在創建GIN索引時,您可以指定參數fastupdateoff,該GIN 索引不存在待處理列表,返回結果為0,示例如下:

CREATE INDEX ON your_table_name (your_column_name gin_trgm_ops) WITH (fastupdate = off);

附錄

GUC參數

pg_bigm.last_update:該插件的最后更新日期,只讀參數。

pg_bigm.enable_recheck:決定是否進行 recheck,默認為on,用戶可以設置,建議保持默認值以保證結果正確性。

pg_bigm.gin_key_limit:限制用于全文本搜索的2-gram元素的最大個數,用戶可以設置,默認為0,代表使用所有的2-gram元素。如果使用所有的2-gram元素導致性能下降,可以設置成較小的正數,限制2-gram元素的個數提升性能。

pg_bigm.similarity_limit:設置相似度閾值,相似度超過這個閾值的元組會作為相似度搜索的結果。

函數

函數

返回值

描述

likequery(text)

string

返回一個可以被LIKE關鍵字識別的搜索字符串。該結果的范圍是0~1(0指兩個字符串完全不相似,1指兩個字符串完全相同)。

show_bigm(text)

text[ ]

返回一個給定字符串中的所有2-gram元素的集合的數組。

bigm_similarity(text, text)

real

返回一個浮點數,計算兩個字符串的相似度。該函數在第二個字符串中搜索并統計兩個字符串共有的2-gram元素。結果的范圍是0~1(0指兩個字符串完全不相似,1指第一個字符串和第二個字符串中的一個詞相同)。

操作符

操作符

返回值

描述

text % text

boolean

檢查左側的文本是否與右側的文本相似,類似于SQL的LIKEILIKE操作符,通過 bigram 索引進行優化以加速匹配。

text =% text

boolean

如果函數的第一個參數包含一個與第二個參數中的詞相似的詞,且這兩詞的相似度等于由pg_bigm.similarity_limit設定的閾值,這個函數返回true。

索引操作符

操作符

描述

gin_bigm_ops

將文本數據轉換成 trigram,并使用 GIN 索引結構保存 trigram。