
# 全文检索概述
文本搜索操作符在数据库中已存在多年。DWS为文本数据类型提供\~、\~\*、LIKE和ILIKE操作符，但这些操作符缺乏现代信息系统所要求的许多必要属性，不过这一问题可以通过使用索引及词典进行解决。
文本检索缺乏信息系统所要求的必要属性：
- 没有语义支持，即使是英语。 由于要识别派生词并不是那么容易，因此正则表达式也不能满足要求。如，satisfies和satisfy，当使用正则表达式寻找satisfy时，并不会查询到包含satisfies的文档。用户可以使用OR搜索多种派生形式，但过程非常繁琐。并且有些词会有上千的派生词，因此容易出错。
  

- 没有对搜索结果的分类（排序）。当搜索出成千的文档时，查找效率很低。

- 由于没有索引的支持，每一次的搜索需要遍历所有的文档，整体搜索比较缓慢。
 
使用全文索引可以对文档进行预处理，并且可以使后续的搜索更快速。预处理过程包括：
- 将文档解析成token。 为每个文档标记不同类别的token是非常有必要的，例如：数字、文字、复合词、电子邮件地址，这样就可以做不同的处理。原则上token的类别依赖于具体的应用，但对于大多数的应用来说，可以使用一组预定义的token类。
  
- 将token转换为词素。 词素像token一样是一个字符串，但它已经标准化处理，这样同一个词的不同形式是一样的。例如，标准化通常包括：将大写字母折成小写字母、删除后缀（如英语中的s或者es）。这将允许通过搜索找到同一个词的不同形式，不需要繁琐地输入所有可能的变形样式。同时，这一步通常会删除停用词。这些停用词通常因为太常见而对搜索无用。（总之，token是文档文本的原片段，而词素被认为是有用的索引和搜索词。）DWS使用词典执行这一步，且提供了各种标准的词典。
  

- 保存搜索优化后的预处理文档。 比如，每个文档可以呈现为标准化词素的有序组合。伴随词素，通常还需要存储词素位置信息以用于邻近排序。因此文档包含的查询词越密集其排序越高。
  
 
词典能够对token如何标准化做到细粒度控制。使用合适的词典，可以定义不被索引的停用词。
数据类型tsvector用于存储预处理文档，tsquery用于存储查询条件，详细内容可参见[文本搜索类型](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0018.html)。为数据类型tsvector提供的函数和操作符可参见[文本检索函数和操作符](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0039.html)，其中最重要的是匹配运算符@@，请参见[基本文本匹配](https://support.huaweicloud.com/sqlreference-911-dws/dws_06_0085.html)。
