
# CREATE TEXT SEARCH DICTIONARY
#### 功能描述
创建一个新的全文检索词典。全文检索词典指定在全文检索时识别特定词并处理的方法。
词典的创建依赖于预定义模板（在系统表PG_TS_TEMPLATE中定义），支持创建五种类型的词典，分别是Simple、Ispell、Synonym、Thesaurus、以及Snowball，每种类型的词典可以完成不同的任务。
#### 注意事项
- 具有SYSADMIN权限的用户可以执行创建词典操作，创建该词典的用户自动成为其所有者。
- 临时模式（pg_temp）下不允许创建词典。
- 创建或修改词典之后，任何对于用户自定义的词典定义文件的修改，将不会影响到数据库中的词典。如果需要在数据库中使用这些修改，需使用ALTER语句更新对应词典的定义文件。
- 不支持修改词典的TEMPLATE参数值。
- 不支持仅修改FILEPATH参数而不修改对应的词典定义文件参数。
- 词典定义文件的文件名仅支持小写字母、数字、下划线混合。

- 预定义词典文件位于$GAUSSHOME/share/postgresql/tsearch_data目录下。
 
#### 语法格式
```
CREATE TEXT SEARCH DICTIONARY name (
    TEMPLATE = template
    [, option = value [, ... ]]
);
```
#### 参数说明
 表1CREATE TEXT SEARCH DICTIONARY参数说明 
| 参数       | 描述                                                     | 取值范围                                                                                                                                    |
|:---|:---|:---|
| name     | 要创建的全文检索词典的名称，可以用模式修饰。                                 | 字符串，需符合[标识符命名规范](https://support.huaweicloud.com/sqlreference-dws/dws_06_0007.html#ZH-CN_TOPIC_0000001811634529__section1475018612353)。 |
| template | 模板名。                                                   | 系统表PG_TS_TEMPLATE中定义的模板：Simple/Synonym/Thesaurus/Ispell/Snowball。                                                                       |
| option   | 全文检索词典特定选项的参数名称。与template对应，不同的词典类型具有不同的参数列表，且与指定顺序无关。 | 详细参数说明参见[表2]。                                                                        |
| value    | 参数值。如果不是简单的标识符或数字，则参数值必须加单引号（标识符和数字同样可以加上单引号）。         | -                                                                                                                                       |
   
 表2Simple、Ispell、Synonym、Thesaurus、以及Snowball的option参数 
| option               | option参数选项的名称                                                        | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
|:---|:---|:---|
| Simple词典对应的option    | STOPWORDS                                                            | 停用词表文件名，默认后缀名为stop。例如STOPWORDS = french，则实际文件名为french.stop。停用词文件格式为一组word列表，每行定义一个停用词。词典处理时，文件中的空行和空格会被忽略，并将stopword词组转换为小写形式。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| Simple词典对应的option    | ACCEPT   | 是否将非停用词设置为已识别。默认值为true。 当Simple词典设置参数ACCEPT=true时，将不会传递任何token给后继词典，此时建议将其放置在词典列表的最后。反之，当ACCEPT=false时，建议将该Simple词典放置在列表中的至少一个词典之前。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| Simple词典对应的option    | FILEPATH        | 停用词文件所在目录。停用词文件可以存放于本地，也可以存放于对象存储服务OBS服务器。如果存放在本地，目录格式为'file://absolute_path'。如果存放于OBS服务器，目录格式为'obs://bucket/path accesskey=ak secretkey=sk region=region_name'。注意目录要用单引号包含。默认值为预定义词典文件所在目录。FILEPATH参数必须和STOPWORDS参数同时指定，不允许单独指定。 使用OBS服务器上的停用词文件创建字典的过程如下： 1. 将停用词文件上传到OBS服务器。例如将french.stop文件上传到OBS服务器obsv3.sa-fb-1.externaldemo.com上名为gaussdb的桶中，其URL为https://gaussdb.obsv3.sa-fb-1.externaldemo.com/french.stop。上传文件及查询URL的方式请参考OBS服务的用户手册。  2. 修改$GAUSSHOME/etc/region_map文件，在其中加入一行"region_name": "obs domain"。region_name可以为任意由大小写字母、数字、斜杠（/）或下划线组成的字符串。obs domain为OBS服务器的域名。 示例，将region_name设为rg，region_map包含的内容如："rg": "obsv3.sa-fb-1.externaldemo.com"。 须知： region_name和obs domain都用双引号，冒号的左边没有空格，右边有一个空格。   3. 执行CREATE TEXT SEARCH DICTIONARY命令创建字典。命令如下： ``` CREATE TEXT SEARCH DICTIONARY french_dict ( TEMPLATE = pg_catalog.simple, STOPWORDS = french, FILEPATH = 'obs://gaussdb accesskey=xxx secretkey=yyy region=rg' ); ``` 由于french.stop文件放在gaussdb桶的根目录下，因此path为空。    |
| Synonym词典对应的option   | SYNONYM                                                              | 同义词词典的定义文件名，默认后缀名为syn。 文件格式为一组同义词列表，每行格式为"token synonym"，即token和其对应的synonym，中间以空格相连。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| Synonym词典对应的option   | CASESENSITIVE                                                        | 设置是否大小写敏感，默认值为false，此时词典文件中的token和synonym均会转为小写形式处理。如果设置为true，则不会进行小写转换。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| Synonym词典对应的option   | FILEPATH                                                             | 同义词词典文件所在目录。目录可以指定为本地目录和OBS目录两种形式。默认值为预定义词典文件所在目录。其中目录格式、以及使用OBS服务器上的文件创建Synonym字典的过程与Simple字典相同。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| Thesaurus词典对应的option | DICTFILE                                                             | 词典定义文件名，默认后缀名为ths。 文件格式为一组同义词列表，每行格式为"sample words : indexed words"，中间冒号（:）作为短语和其替换词间的分隔符。TZ词典处理时，如果有多个匹配的sample words，将选择最长匹配输出。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| Thesaurus词典对应的option | DICTIONARY                                                           | 用于词规范化的子词典名，必须且仅能定义一个。该词典必须是已经存在的，在检查短语匹配之前使用，用于识别和规范输入文本。 如果子词典无法识别输入词，将会报错。此时，需要移除该词或者更新子词典使其识别。此外，可在indexed words的开头放上一个星号（\*）来跳过在其上应用子词典，但是所有sample words必须可以被子词典识别。 如果词典文件定义的sample words中，含有子词典中定义的停用词，需要用问号（？）替代停用词。假设a和the是子词典中所定义的停用词，如下： ``` ? one ? two : swsw ``` 上述同义词组定义会匹配"a one the two"以及"the one a two"，这两个短语均会被swsw替代输出。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Thesaurus词典对应的option | FILEPATH                                                             | 词典定义文件所在目录。目录可以指定为本地目录和OBS目录两种形式。默认值为预定义词典文件所在目录。其中目录格式、以及使用OBS服务器上的文件创建Synonym字典的过程与Simple字典相同。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| Ispell词典             | DICTFILE                                                             | 词典定义文件名，默认后缀名为dict。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Ispell词典             | AFFFILE                                                              | 词缀文件名，默认后缀名为affix。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| Ispell词典             | STOPWORDS                                                            | 停用词文件名，默认后缀名为stop，文件格式要求与Simple类型词典的停用词文件相同。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| Ispell词典             | FILEPATH                                                             | 词典文件所在目录。可以指定为本地目录和OBS目录两种形式。默认值为预定义词典文件所在目录。其中目录格式、以及使用OBS服务器上的文件创建Synonym字典的过程与Simple字典相同。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| Snowball词典           | LANGUAGE                                                             | 语言名，标识使用哪种语言的词干分析算法。算法按照对应语言中的拼写规则，缩减输入词的常见变体形式为一个基础词或词干。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Snowball词典           | STOPWORDS                                                            | 停用词表文件名，默认后缀名为stop，文件格式要求与Simple类型词典的停用词文件相同。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| Snowball词典           | FILEPATH                                                             | 词典定义文件所在目录。可以指定为本地目录或者OBS目录。默认值为预定义词典文件所在目录。FILEPATH参数必须和STOPWORDS参数同时指定，不允许单独指定。其中目录格式、以及用OBS服务器上的文件创建Snowball字典的过程与Simple字典相同。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   
#### 示例
创建一个Ispell词典类型的词典english_ispell（词典定义文件来自开源词典）。
```
CREATE TEXT SEARCH DICTIONARY english_ispell (
    TEMPLATE = ispell,
    DictFile = english,
    AffFile = english,
    StopWords = english,
    FilePath = 'obs://bucket_name/path accesskey=ak secretkey=sk region=rg' 
);
```
请参见[配置示例](https://support.huaweicloud.com/sqlreference-dws/dws_06_0110.html)一节的示例。
#### 相关链接
[ALTER TEXT SEARCH DICTIONARY](https://support.huaweicloud.com/sqlreference-dws/dws_06_0146.html)，[CREATE TEXT SEARCH DICTIONARY](https://support.huaweicloud.com/sqlreference-dws/dws_06_0183.html)
