华为云用户手册

  • 示例 12345678 --向用户组中添加用户。gaussdb=# ALTER GROUP super_users ADD USER lche, jim;--从用户组中删除用户。gaussdb=# ALTER GROUP super_users DROP USER jim;--修改用户组的名称。gaussdb=# ALTER GROUP super_users RENAME TO normal_users;
  • 语法格式 向用户组中添加用户。 12 ALTER GROUP group_name ADD USER user_name [, ... ]; 从用户组中删除用户。 12 ALTER GROUP group_name DROP USER user_name [, ... ]; 修改用户组的名称。 12 ALTER GROUP group_name RENAME TO new_name;
  • 参数说明 database_name 需要修改属性的数据库名称。 取值范围:字符串,要符合标识符的命名规范。 connlimit 数据库可以接收的最大并发连接数(管理员用户连接除外)。 取值范围:整数,建议填写1~50的整数。-1(缺省)表示没有限制。 new_name 数据库的新名称。 取值范围:字符串,要符合标识符的命名规范。 new_owner 数据库的新所有者。 取值范围:字符串,有效的用户名。 new_tablespace 数据库新的默认表空间,该表空间为数据库中已经存在的表空间。默认的表空间为pg_default。 取值范围:字符串,有效的表空间名。 configuration_parameter value 把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置。 当前版本不支持设置数据库级别参数。 取值范围:字符串 DEFAULT OFF RESET time_zone 设置database_name的数据库的时区值,需要有对应的数据库的权限。 取值范围:字符串 系统支持的时区和其相应的缩写 -15:59到+15:00 FROM CURRENT 根据当前会话连接的数据库设置该参数的值。 RESET configuration_parameter 重置指定的数据库会话参数值。 当前版本不支持重置数据库级别参数。 RESET ALL 重置全部的数据库会话参数值。 当前版本不支持重置数据库级别参数。 修改数据库默认表空间,会将旧表空间中的所有表和索引转移到新表空间中,该操作不会影响其他非默认表空间中的表和索引。 修改的数据库会话参数值,将在下一次会话中生效。 执行完参数设置后,需要手动执行CLEAN CONNECTION清理旧连接,否则可能存在集群节点间参数值不一致。
  • 注意事项 只有数据库的所有者或者被授予了数据库ALTER权限的用户才能执行ALTER DATABASE命令,系统管理员默认拥有此权限。针对所要修改属性的不同,对其还有以下权限约束: 修改数据库名称,必须拥有CREATEDB权限。 修改数据库所有者,当前用户必须是该database的所有者或者系统管理员,必须拥有CREATEDB权限,且该用户是新所有者角色的成员。 修改数据库默认表空间,该用户必须拥有新表空间的CREATE权限。这个语句会从物理上将一个数据库原来缺省表空间上的表和索引移至新的表空间。注意不在缺省表空间的表和索引不受此影响。 不能重命名当前使用的数据库,如果需要重新命名,须连接至其他数据库上。
  • 语法格式 修改数据库的最大连接数。 12 ALTER DATABASE database_name [ [ WITH ] CONNECTION LIMIT connlimit ]; 修改数据库名称。 12 ALTER DATABASE database_name RENAME TO new_name; 修改数据库所属者。 12 ALTER DATABASE database_name OWNER TO new_owner;
  • 参数说明 src_name 待修改的Data Source的名称。 取值范围:字符串,需要符合标识符的命名规范。 TYPE 将Data Source原来的TYPE修改为指定值。 取值范围:空串或非空字符串。 VERSION 将Data Source原来的VERSION修改为指定值。 取值范围:空串或非空字符串或NULL。 OPTIONS 修改OPTIONS中的字段:增加(ADD)、修改(SET)、删除(DROP),且字段名称optname需唯一,具体要求如下: 增加字段:ADD可以省略,待增加字段不能已经存在了; 修改字段:SET不可省略,待修改字段必须存在; 删除字段:DROP不可省略,待删除字段必须存在,且不能指定optvalue; src_new_name 新的Data Source名称。 取值范围:字符串,需符合标识符命名规范。 new_user 对象的新属主。 取值范围:字符串,有效的用户名。
  • 注意选项 只有初始用户/系统管理员/属主才拥有修改Data Source的权限。 修改属主时,新的属主用户必须是初始用户或系统管理员。 当在OPTIONS中出现password选项时,需要保证集群每个节点的$GAUSSHOME/bin目录下存在datasource.key.cipher和datasource.key.rand文件,如果不存在这两个文件,请使用gs_guc工具生成并使用gs_ssh工具发布到集群每个节点的$GAUSSHOME/bin目录下。
  • 语法格式 123456 ALTER DATA SOURCE src_name [TYPE 'type_str'] [VERSION {'version_str' | NULL}] [OPTIONS ( { [ ADD | SET | DROP ] optname ['optvalue'] } [, ...] )];ALTER DATA SOURCE src_name RENAME TO src_new_name;ALTER DATA SOURCE src_name OWNER TO new_owner;
  • 示例 1 2 3 4 5 6 7 8 91011121314151617181920212223242526 --创建一个空Data Source对象。gaussdb=# CREATE DATA SOURCE ds_test1;--修改名称。gaussdb=# ALTER DATA SOURCE ds_test1 RENAME TO ds_test;--修改属主。gaussdb=# CREATE USER user_test1 IDENTIFIED BY 'Gs@123456';gaussdb=# ALTER USER user_test1 WITH SYSADMIN;gaussdb=# ALTER DATA SOURCE ds_test OWNER TO user_test1;--修改TYPE和VERSION。gaussdb=# ALTER DATA SOURCE ds_test TYPE 'MPPDB_TYPE' VERSION 'XXX';--添加字段。gaussdb=# ALTER DATA SOURCE ds_test OPTIONS (add dsn 'mppdb', username 'test_user');--修改字段。gaussdb=# ALTER DATA SOURCE ds_test OPTIONS (set dsn 'unknown');--删除字段。gaussdb=# ALTER DATA SOURCE ds_test OPTIONS (drop username);--删除Data Source和user对象。gaussdb=# DROP DATA SOURCE ds_test;gaussdb=# DROP USER user_test1;
  • 语法格式 ALTER AUDIT POLICY [ IF EXISTS ] policy_name { ADD | REMOVE } { [ privilege_audit_clause ] [ access_audit_clause ] };ALTER AUDIT POLICY [ IF EXISTS ] policy_name MODIFY ( filter_group_clause );ALTER AUDIT POLICY [ IF EXISTS ] policy_name DROP FILTER; ALTER AUDIT POLICY [ IF EXISTS ] policy_name COMMENTS policy_comments;ALTER AUDIT POLICY [ IF EXISTS ] policy_name { ENABLE | DISABLE }; privilege_audit_clause: 1 PRIVILEGES { DDL | ALL } access_audit_clause: ACCESS { DML | ALL }
  • 参数说明 nodename 节点名,对应在pgxc_node系统表的一行记录,指定后将修改记录中的nodeis_active字段值。 取值范围:字符串,只支持CN,并且要保证该节点名在pgxc_node系统表中有对应的记录。 status pgxc_node系统表中nodeis_acitve字段的更新值。 取值范围: - FALSE - TRUE nodename1[, nodename2, nodename3 ...] 该SQL执行的节点范围,ALTER COORDINATOR执行时会自动下发到范围内的所有节点,需要包含当前执行节点。 取值范围:字符串,只支持CN,要保证该节点名在pgxc_node系统表中有对应的记录,并且节点状态正常,否则SQL执行失败。
  • 参数说明 policy_name 审计策略名称,需要唯一,不可重复; 取值范围:字符串,要符合标识符的命名规范。 DDL 指的是针对数据库执行如下操作时进行审计,目前支持:ALTER、ANALYZE、COMMENT、CREATE、DROP、GRANT、REVOKE、SET、SHOW、LOGIN_ACCESS、LOGIN_FAILURE、LOGOUT、LOGIN。 ALL 指的是上述DDL支持的所有对数据库的操作。 DML 指的是针对数据库执行如下操作时进行审计,目前支持:COPY、DEALLOCATE、DELETE_P、EXECUTE、REINDEX、INSERT、PREPARE、SELECT、TRUNCATE、UPDATE。 FILTER_TYPE 指定审计策略的过滤信息,过滤类型包括:IP、ROLES、APP。 filter_value 指具体过滤信息内容。 policy_comments 用于记录策略相关的描述信息。 ENABLE|DISABLE 可以打开或关闭统一审计策略。若不指定ENABLE|DISABLE,语句默认为ENABLE。
  • 示例 集群有3个CN,cn_5001、cn_5002、cn_5003,均处于正常工作状态。 cn_5001发生故障且满足剔除时间要求后,需要将cn_5001从集群中剔除,执行SQL在cn_5002和cn5003节点上刷新pgxc_node系统表中cn_5001对应记录的nodeis_active为false: ALTER COORDINATOR cn_5001 SET False WITH (cn_5002,cn_5003)。 cn_5001故障解除后,为了在集群中加回cn_5001,执行SQL在cn_5002和cn5003节点上刷新pgxc_node系统表中cn_5001对应记录的nodeis_active为ture: ALTER COORDINATOR cn_5001 SET True WITH (cn_5002,cn_5003)。
  • 参数说明 column_encryption_key_name 该参数作为密钥对象名,在同一命名空间下,需满足命名唯一性约束。 取值范围:字符串,要符合标识符的命名规范。 client_master_key_name 指定用于重加密该CEK的新的CMK,取值为:CMK对象名,该CMK对象由CREATE CLIENT MASTER KEY语法创建。与密钥轮转前指定的客户端主密钥不为同一密钥。 国密算法约束: 由于SM2、SM3、SM4等算法属于中国国家密码标准算法,为规避法律风险,需配套使用。如果轮转CEK前使用的CMK是国密算法,则轮转CEK指定的CMK仍必须使用国密算法。
  • 示例 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637 --创建表customer_demographics_t1。gaussdb=# CREATE TABLE customer_demographics_t1( CD_DEMO_SK INTEGER NOT NULL, CD_GENDER CHAR(1) , CD_MARITAL_STATUS CHAR(1) , CD_EDUCATION_STATUS CHAR(20) , CD_PURCHASE_ESTIMATE INTEGER , CD_CREDIT_RATING CHAR(10) , CD_DEP_COUNT INTEGER , CD_DEP_EMPLOYED_COUNT INTEGER , CD_DEP_COLLEGE_COUNT INTEGER)WITH (ORIENTATION = COLUMN,COMPRESSION=MIDDLE)DISTRIBUTE BY HASH (CD_DEMO_SK);--插入记录。gaussdb=# INSERT INTO customer_demographics_t1 VALUES(1920801,'M', 'U', 'DOCTOR DEGREE', 200, 'GOOD', 1, 0,0);--开启事务。gaussdb=# START TRANSACTION;--更新字段值。gaussdb=# UPDATE customer_demographics_t1 SET cd_education_status= 'Unknown';--终止事务,上面所执行的更新会被撤销掉。gaussdb=# ABORT; --查询数据。gaussdb=# SELECT * FROM customer_demographics_t1 WHERE cd_demo_sk = 1920801;cd_demo_sk | cd_gender | cd_marital_status | cd_education_status | cd_purchase_estimate | cd_credit_rating | cd_dep_count | cd_dep_employed_count | cd_dep_college_count ------------+-----------+-------------------+----------------------+----------------------+------------------+--------------+-----------------------+---------------------- 1920801 | M | U | DOCTOR DEGREE | 200 | GOOD | 1 | 0 | 0(1 row)--删除表。gaussdb=# DROP TABLE customer_demographics_t1;
  • 示例 1 2 3 4 5 6 7 8 91011121314151617181920 -- 创建一个资源池,其控制组指定为"DefaultClass"组下属的"High" Timeshare Workload控制组。gaussdb=# CREATE RESOURCE POOL pool1 WITH (CONTROL_GROUP="High");-- 创建一个负载组,关联已创建的资源池。gaussdb=# CREATE WORKLOAD GROUP wg_hr1 USING RESOURCE POOL pool1;--创建一个默认应用映射组,关联默认的负载组。gaussdb=# CREATE APP WORKLOAD GROUP MAPPING app_wg_map1;-- 更新一个应用映射组关联的负载组名称。gaussdb=# ALTER APP WORKLOAD GROUP MAPPING app_wg_map1 WITH(WORKLOAD_GPNAME=wg_hr1);--删除应用映射组。gaussdb=# DROP APP WORKLOAD GROUP MAPPING app_wg_map1;--删除负载组。gaussdb=# DROP WORKLOAD GROUP wg_hr1;--删除资源池。gaussdb=# DROP RESOURCE POOL pool1;
  • IN expression IN (value [, ...]) 右侧括号中的是一个表达式列表。左侧表达式的结果与表达式列表的内容进行比较。如果列表中的内容符合左侧表达式的结果,则IN的结果为true。如果没有相符的结果,则IN的结果为false。 示例如下: 12345 gaussdb=# SELECT 8000+500 IN (10000, 9000) AS RESULT; result ---------- f(1 row)
  • NOT IN expression NOT IN (value [, ...]) 右侧括号中的是一个表达式列表。左侧表达式的结果与表达式列表的内容进行比较。如果在列表中的内容没有符合左侧表达式结果的内容,则NOT IN的结果为true。如果有符合的内容,则NOT IN的结果为false。 示例如下: 12345 gaussdb=# SELECT 8000+500 NOT IN (10000, 9000) AS RESULT; result ---------- t(1 row) 如果查询语句返回结果为空,或者表达式列表不符合表达式的条件且右侧表达式列表返回结果至少一处为空,则NOT IN的返回结果为null,而不是false。这样的处理方式和SQL返回空值的布尔组合规则是一致的。 提示:在所有情况下X NOT IN Y等价于NOT(X IN Y)。 不支持对XML类型数据操作。
  • SQL语法格式说明 表1 SQL语法格式说明 格式 意义 [ ] 表示用“[ ]”括起来的部分是可选的。 ... 表示前面的元素可重复出现。 [ x | y | ... ] 表示从两个或多个选项中选取一个或者不选。 { x | y | ... } 表示从两个或多个选项中选取一个。 [x | y | ... ] [ ... ] 表示可选多个参数或者不选,如果选择多个参数,则参数之间用空格分隔。 [ x | y | ... ] [ ,... ] 表示可选多个参数或者不选,如果选择多个参数,则参数之间用逗号分隔。 { x | y | ... } [ ... ] 表示可选多个参数,至少选一个,如果选择多个参数,则参数之间以空格分隔。 { x | y | ... } [ ,... ] 表示可选多个参数,至少选一个,如果选择多个参数,则参数之间用逗号分隔。 父主题: SQL语法
  • 分词器测试 函数ts_debug允许简单测试文本搜索分词器。 12345678 ts_debug([ config regconfig, ] document text, OUT alias text, OUT description text, OUT token text, OUT dictionaries regdictionary[], OUT dictionary regdictionary, OUT lexemes text[]) returns setof record ts_debug显示document的每个token信息,token是由解析器生成,由指定的词典进行处理。如果忽略对应参数,则使用config指定的分词器或者default_text_search_config指定的分词器。 ts_debug为文本解析器标识的每个token返回一行记录。记录中的列分别是: alias:text类型,token的别名。 description:text类型,token的描述。 token:text类型,token的文本内容。 dictionaries:regdictionary数组类型,是分词器为token选定的词典。 dictionary:regdictionary类型,用来识别token的词典。如果为空,则不做识别。 lexemes:text数组类型,词典识别token时生成的词素。如果为空,则不生成词素。空数组({})意味着token将被识别成停用词。 一个简单的例子: 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728 gaussdb=# SELECT * FROM ts_debug('english','a fat cat sat on a mat - it ate a fat rats'); alias | description | token | dictionaries | dictionary | lexemes -----------+-----------------+-------+----------------+--------------+--------- asciiword | Word, all ASCII | a | {english_stem} | english_stem | {} blank | Space symbols | | {} | | asciiword | Word, all ASCII | fat | {english_stem} | english_stem | {fat} blank | Space symbols | | {} | | asciiword | Word, all ASCII | cat | {english_stem} | english_stem | {cat} blank | Space symbols | | {} | | asciiword | Word, all ASCII | sat | {english_stem} | english_stem | {sat} blank | Space symbols | | {} | | asciiword | Word, all ASCII | on | {english_stem} | english_stem | {} blank | Space symbols | | {} | | asciiword | Word, all ASCII | a | {english_stem} | english_stem | {} blank | Space symbols | | {} | | asciiword | Word, all ASCII | mat | {english_stem} | english_stem | {mat} blank | Space symbols | | {} | | blank | Space symbols | - | {} | | asciiword | Word, all ASCII | it | {english_stem} | english_stem | {} blank | Space symbols | | {} | | asciiword | Word, all ASCII | ate | {english_stem} | english_stem | {ate} blank | Space symbols | | {} | | asciiword | Word, all ASCII | a | {english_stem} | english_stem | {} blank | Space symbols | | {} | | asciiword | Word, all ASCII | fat | {english_stem} | english_stem | {fat} blank | Space symbols | | {} | | asciiword | Word, all ASCII | rats | {english_stem} | english_stem | {rat}(24 rows) 父主题: 测试和调试文本搜索
  • age解析器测试 函数ts_parse可以直接测试文本搜索解析器。 12 ts_parse(parser_name text, document text, OUT tokid integer, OUT token text) returns setof record ts_parse解析指定的document并返回一系列的记录,一条记录代表一个解析生成的token。每条记录包括标识token类型的tokid,及token文本。例如: 1 2 3 4 5 6 7 8 910 gaussdb=# SELECT * FROM ts_parse('default', '123 - a number'); tokid | token-------+-------- 22 | 123 12 | 12 | - 1 | a 12 | 1 | number(6 rows) 函数ts_token_type返回指定解析器的token类型及其描述信息。 12 ts_token_type(parser_name text, OUT tokid integer, OUT alias text, OUT description text) returns setof record ts_token_type返回一个表,这个表描述了指定解析器可以识别的每种token类型。对于每个token类型,表中给出了整数类型的tokid--用于解析器标记对应的token类型;alias——命名分词器命令中的token类型;及简单描述。比如: 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627 gaussdb=# SELECT * FROM ts_token_type('default'); tokid | alias | description -------+-----------------+------------------------------------------ 1 | asciiword | Word, all ASCII 2 | word | Word, all letters 3 | numword | Word, letters and digits 4 | email | Email address 5 | url | URL 6 | host | Host 7 | sfloat | Scientific notation 8 | version | Version number 9 | hword_numpart | Hyphenated word part, letters and digits 10 | hword_part | Hyphenated word part, all letters 11 | hword_asciipart | Hyphenated word part, all ASCII 12 | blank | Space symbols 13 | tag | XML tag 14 | protocol | Protocol head 15 | numhword | Hyphenated word, letters and digits 16 | asciihword | Hyphenated word, all ASCII 17 | hword | Hyphenated word, all letters 18 | url_path | URL path 19 | file | File or path name 20 | float | Decimal notation 21 | int | Signed integer 22 | uint | Unsigned integer 23 | entity | XML entity(23 rows) 父主题: 测试和调试文本搜索
  • 操作步骤 创建一个文本搜索配置ts_conf,复制预定义的文本搜索配置english。 12 gaussdb=# CREATE TEXT SEARCH CONFIGURATION ts_conf ( COPY = pg_catalog.english );CREATE TEXT SEARCH CONFIGURATION 创建Synonym词典。 假设同义词词典定义文件gs_dict.syn内容如下: 12 gaussdb gsgauss gs 执行如下语句创建Synonym词典: 12345 gaussdb=# CREATE TEXT SEARCH DICTIONARY gs_dict ( TEMPLATE = synonym, SYNONYMS = gs_dict, FILEPATH = 'file:///home/dicts' ); 创建一个Ispell词典english_ispell(词典定义文件来自开源词典)。 1234567 gaussdb=# CREATE TEXT SEARCH DICTIONARY english_ispell ( TEMPLATE = ispell, DictFile = english, AffFile = english, StopWords = english, FILEPATH = 'file:///home/dicts' ); 设置文本搜索配置ts_conf,修改某些类型的token对应的词典列表。关于token类型的详细信息,请参见解析器。 1234 gaussdb=# ALTER TEXT SEARCH CONFIGURATION ts_conf ALTER MAPPING FOR asciiword, asciihword, hword_asciipart, word, hword, hword_part WITH gs_dict, english_ispell, english_stem; 在文本搜索配置中,选择设置不索引或搜索某些token类型。 12 gaussdb=# ALTER TEXT SEARCH CONFIGURATION ts_conf DROP MAPPING FOR email, url, url_path, sfloat, float; 使用文本检索调测函数ts_debug()对所创建的词典配置ts_conf进行测试。 12345 gaussdb=# SELECT * FROM ts_debug('ts_conf', 'GaussDB, the highly scalable, SQL compliant, open source object-relationaldatabase management system, is now undergoing beta testing of the nextversion of our software.'); 可以设置当前session使用ts_conf作为默认的文本搜索配置。此设置仅在当前session有效。 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627 gaussdb=# \dF+ ts_conf Text search configuration "public.ts_conf"Parser: "pg_catalog.default" Token | Dictionaries -----------------+------------------------------------- asciihword | gs_dict,english_ispell,english_stem asciiword | gs_dict,english_ispell,english_stem file | simple host | simple hword | gs_dict,english_ispell,english_stem hword_asciipart | gs_dict,english_ispell,english_stem hword_numpart | simple hword_part | gs_dict,english_ispell,english_stem int | simple numhword | simple numword | simple uint | simple version | simple word | gs_dict,english_ispell,english_stemgaussdb=# SET default_text_search_config = 'public.ts_conf';SETgaussdb=# SHOW default_text_search_config; default_text_search_config ---------------------------- public.ts_conf(1 row)
  • 词典测试 函数ts_lexize用于进行词典测试。 ts_lexize(dict regdictionary, token text) returns text[]如果输入的token可以被词典识别,那么ts_lexize返回词素的数组;如果token可以被词典识别到它是一个停用词,则返回空数组;如果是一个不可识别的词则返回NULL。 比如: 123456789 gaussdb=# SELECT ts_lexize('english_stem', 'stars'); ts_lexize----------- {star}gaussdb=# SELECT ts_lexize('english_stem', 'a'); ts_lexize----------- {} ts_lexize函数支持单一token,不支持文本。 父主题: 测试和调试文本搜索
  • 操作步骤 获取词典定义文件和词缀文件。 用户可以使用开源词典(OpenOffice上可以获取),直接获取的开源词典后缀名可能为.aff和.dic,此时需要将扩展名改为.affix和.dict。此外,对于某些词典文件,还需要使用下面的命令把字符转换成UTF-8编码,比如挪威语词典: 12 iconv -f ISO_8859-1 -t UTF-8 -o nn_no.affix nn_NO.aff iconv -f ISO_8859-1 -t UTF-8 -o nn_no.dict nn_NO.dic 创建Ispell词典。 123456 gaussdb=# CREATE TEXT SEARCH DICTIONARY norwegian_ispell ( TEMPLATE = ispell, DictFile = nn_no, AffFile = nn_no, FilePath = 'file:///home/dicts'); 其中,词典文件全名为nn_no.dict和nn_no.affix,所在目录为当前连接CN节点的/home/dicts/下。关于创建词典的语法和更多参数,请参见CREATE TEXT SEARCH DICTIONARY。 使用Ispell词典进行复合词拆分。 12345 gaussdb=# SELECT ts_lexize('norwegian_ispell', 'sjokoladefabrikk'); ts_lexize --------------------- {sjokolade,fabrikk}(1 row) MySpell不支持复合词,Hunspell对复合词有较好的支持。GaussDB仅支持Hunspell中基本的复合词操作。通常情况下,Ispell词典能够识别的词是一个有限集合,其后应该配置一个更广义的词典,例如一个可以识别所有词的Snowball词典。
  • 注意事项 由于TZ词典需要识别短语,所以在处理过程中必须保存当前状态并与解析器进行交互,以决定是否处理下一个token或是结束当前识别。此外,TZ词典配置时需谨慎,如果设置TZ词典仅处理asciiword类型的token,则类似one 7的分类词典定义将不会生效,因为uint类型的token不会传给TZ词典处理。 在索引期间要用到分类词典,因此分类词典参数中的任何变化都要求重新索引。对于其他大多数类型的词典来说,类似添加或删除停用词这种修改并不需要强制重新索引。
  • 操作步骤 创建一个名为thesaurus_astro的TZ词典。 以一个简单的天文学词典thesaurus_astro为例,其中定义了两组天文短语及其同义词如下: 12 supernovae stars : sn crab nebulae : crab 执行如下语句创建TZ词典: 123456 gaussdb=# CREATE TEXT SEARCH DICTIONARY thesaurus_astro ( TEMPLATE = thesaurus, DictFile = thesaurus_astro, Dictionary = pg_catalog.english_stem, FILEPATH = 'file:///home/dicts/'); 其中,词典定义文件全名为thesaurus_astro.ths,所在目录为当前连接CN节点的/home/dicts/下 。子词典pg_catalog.english_stem是预定义的Snowball类型的英语词干词典,用于规范化输入词,子词典自身相关配置(例如停用词等)不在此处显示。关于创建词典的语法和更多参数,请参见CREATE TEXT SEARCH DICTIONARY。 创建词典后,将其绑定到对应文本搜索配置中需要处理的token类型上: 123 gaussdb=# ALTER TEXT SEARCH CONFIGURATION russian ALTER MAPPING FOR asciiword, asciihword, hword_asciipart WITH thesaurus_astro, english_stem; 使用TZ词典。 测试TZ词典。 ts_lexize函数对于测试TZ词典作用不大,因为该函数是按照单个token处理输入。可以使用plainto_tsquery、to_tsvector、to_tsquery函数测试TZ词典,这些函数能够将输入分解成多个token(to_tsquery函数需要将输入加上引号)。 1 2 3 4 5 6 7 8 91011121314151617 gaussdb=# SELECT plainto_tsquery('russian','supernova star'); plainto_tsquery ----------------- 'sn'(1 row)gaussdb=# SELECT to_tsvector('russian','supernova star'); to_tsvector ------------- 'sn':1(1 row)gaussdb=# SELECT to_tsquery('russian','''supernova star'''); to_tsquery ------------ 'sn'(1 row) 其中,supernova star匹配了词典thesaurus_astro定义中的supernovae stars,这是因为在thesaurus_astro词典定义中指定了Snowball类型的子词典english_stem,该词典移除了e和s。 如果同时需要索引原始短语,只要将其同时放置在词典定义文件中对应定义的右侧即可,如下: 1 2 3 4 5 6 7 8 91011 supernovae stars : sn supernovae starsgaussdb=# ALTER TEXT SEARCH DICTIONARY thesaurus_astro ( DictFile = thesaurus_astro, FILEPATH = 'file:///home/dicts/');gaussdb=# SELECT plainto_tsquery('russian','supernova star'); plainto_tsquery ----------------------------- 'sn' & 'supernova' & 'star'(1 row)
  • Snowball词典 Snowball词典模板支持词干分析词典,基于Martin Porter的Snowball项目,内置有许多语言的词干分析算法。GaussDB中预定义有多种语言的Snowball词典,可通过系统表PG_TS_DICT查看预定义的词干分析词典以及支持的语言词干分析算法。 无论是否可以简化,Snowball词典将标示所有输入为已识别,因此它应当被放置在词典列表的最后。把Snowball词典放在任何其他词典前面会导致后继词典失效,因为输入token不会通过Snowball词典进入到下一个词典。 关于Snowball词典的语法,请参见CREATE TEXT SEARCH DICTIONARY。 父主题: 词典
  • 示例 Synonym词典可用于解决语言学相关问题,例如,为避免使单词"Paris"变成"pari",可在Synonym词典文件中定义一行"Paris paris",并将该词典放置在预定义的english_stem词典之前。 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435363738394041 gaussdb=# SELECT * FROM ts_debug('english', 'Paris'); alias | description | token | dictionaries | dictionary | lexemes -----------+-----------------+-------+----------------+--------------+--------- asciiword | Word, all ASCII | Paris | {english_stem} | english_stem | {pari}(1 row)gaussdb=# CREATE TEXT SEARCH DICTIONARY my_synonym ( TEMPLATE = synonym, SYNONYMS = my_synonyms, FILEPATH = 'file:///home/dicts/' );gaussdb=# ALTER TEXT SEARCH CONFIGURATION english ALTER MAPPING FOR asciiword WITH my_synonym, english_stem;gaussdb=# SELECT * FROM ts_debug('english', 'Paris'); alias | description | token | dictionaries | dictionary | lexemes -----------+-----------------+-------+---------------------------+------------+--------- asciiword | Word, all ASCII | Paris | {my_synonym,english_stem} | my_synonym | {paris}(1 row)gaussdb=# SELECT * FROM ts_debug('english', 'paris'); alias | description | token | dictionaries | dictionary | lexemes -----------+-----------------+-------+---------------------------+------------+--------- asciiword | Word, all ASCII | Paris | {my_synonym,english_stem} | my_synonym | {paris}(1 row)gaussdb=# ALTER TEXT SEARCH DICTIONARY my_synonym ( CASESENSITIVE=true);gaussdb=# SELECT * FROM ts_debug('english', 'Paris'); alias | description | token | dictionaries | dictionary | lexemes -----------+-----------------+-------+---------------------------+------------+--------- asciiword | Word, all ASCII | Paris | {my_synonym,english_stem} | my_synonym | {paris}(1 row)gaussdb=# SELECT * FROM ts_debug('english', 'paris'); alias | description | token | dictionaries | dictionary | lexemes -----------+-----------------+-------+---------------------------+------------+--------- asciiword | Word, all ASCII | Paris | {my_synonym,english_stem} | my_synonym | {pari}(1 row) 其中,同义词词典文件全名为my_synonyms.syn,所在目录为当前连接CN节点的/home/dicts/下。关于创建词典的语法和更多参数,请参见CREATE TEXT SEARCH DICTIONARY。 星号(*)可用于词典文件中的同义词结尾,表示该同义词是一个前缀。在to_tsvector()中该星号将被忽略,但在to_tsquery()中会匹配该前缀并对应输出结果(参照处理查询一节)。 假设词典文件synonym_sample.syn内容如下: 12 gogle googl indices index* 创建并使用词典: 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435363738 gaussdb=# CREATE TEXT SEARCH DICTIONARY syn ( TEMPLATE = synonym, SYNONYMS = synonym_sample);gaussdb=# SELECT ts_lexize('syn','indices'); ts_lexize ----------- {index}(1 row)gaussdb=# CREATE TEXT SEARCH CONFIGURATION tst (copy=simple);gaussdb=# ALTER TEXT SEARCH CONFIGURATION tst ALTER MAPPING FOR asciiword WITH syn;gaussdb=# SELECT to_tsvector('tst','indices'); to_tsvector ------------- 'index':1(1 row)gaussdb=# SELECT to_tsquery('tst','indices'); to_tsquery ------------ 'index':*(1 row)gaussdb=# SELECT 'indexes are very useful'::tsvector; tsvector --------------------------------- 'are' 'indexes' 'useful' 'very'(1 row)gaussdb=# SELECT 'indexes are very useful'::tsvector @@ to_tsquery('tst','indices'); ?column? ---------- t(1 row)
  • 操作步骤 创建Simple词典。 1234 gaussdb=# CREATE TEXT SEARCH DICTIONARY public.simple_dict ( TEMPLATE = pg_catalog.simple, STOPWORDS = english); 其中,停用词表文件全名为english.stop。关于创建simple词典的语法和更多参数,请参见CREATE TEXT SEARCH DICTIONARY。 使用Simple词典。 1 2 3 4 5 6 7 8 91011 gaussdb=# SELECT ts_lexize('public.simple_dict','YeS'); ts_lexize ----------- {yes}(1 row)gaussdb=# SELECT ts_lexize('public.simple_dict','The'); ts_lexize ----------- {}(1 row) 设置参数ACCEPT=false,使Simple词典返回NULL,而不是返回非停用词的小写形式。 1 2 3 4 5 6 7 8 910111213 gaussdb=# ALTER TEXT SEARCH DICTIONARY public.simple_dict ( Accept = false );ALTER TEXT SEARCH DICTIONARYgaussdb=# SELECT ts_lexize('public.simple_dict','YeS'); ts_lexize -----------(1 row)gaussdb=# SELECT ts_lexize('public.simple_dict','The'); ts_lexize ----------- {}(1 row)
  • 注意事项 大多数词典的功能依赖于词典定义文件,词典定义文件名仅支持小写字母、数字、下划线组合。 临时模式pg_temp下不允许创建词典。 词典定义文件的字符集编码必须为UTF-8格式。实际应用时,如果与数据库的字符编码格式不一致,在读入词典定义文件时会进行编码转换。 通常情况下,每个session仅读取词典定义文件一次,当且仅当在第一次使用该词典时。需要修改词典文件时,可通过ALTER TEXT SEARCH DICTIONARY命令进行词典定义文件的更新和重新加载。
共100000条