VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

全文检索概述

功能描述

文本搜索操作符在数据库中已存在多年。Vastbase为文本数据类型提供~、~*、LIKE和ILIKE操作符用于匹配字符进行检索,同时可以通过使用词典和索引满足现代信息系统所要求的许多必要属性。

注意事项

  • 每个分词长度必须小于2K字节。
  • tsvector结构(分词+位置)的长度必须小于1M字节。
  • tsvector的位置值必须大于0,且小于等于16,383字节。
  • 每个分词在文档中位置数必须小于256,若超过将舍弃后面的位置信息。
  • tsquery中的关键字及对应运算符最大支持到32768字节。
  • 没有语义支持,即使是英语。由于要识别派生词并不是那么容易,因此正则表达式也不能满足要求。如,satisfies和satisfy,当使用正则表达式寻找satisfy时,并不会查询到包含satisfies的文档。用户可以使用OR搜索多种派生形式,但过程非常繁琐。并且有些词会有上千的派生词,因此容易出错。

  • 没有对搜索结果的分类(排序)。当搜索出成千的文档时,查找效率很低。

  • 由于没有索引的支持,每一次的搜索需要遍历所有的文档,整体搜索比较缓慢。使用全文索引可以对文档进行预处理,并且可以使后续的搜索更快速。预处理过程包括:

    • 将文档解析成token。为每个文档标记不同类别的token是非常有必要的,例如:数字、文字、复合词、电子邮件地址,这样就可以做不同的处理。原则上token的类别依赖于具体的应用,但对于大多数的应用来说,可以使用一组预定义的token类。

    • 将token转换为词素。词素像token一样是一个字符串,但它已经标准化处理,这样同一个词的不同形式是一样的。例如,标准化通常包括:将大写字母转换成小写字母、删除后缀(如英语中的s或者es)。这将允许通过搜索找到同一个词的不同形式,不需要繁琐地输入所有可能的变形样式。同时,这一步通常会删除停用词。这些停用词通常因为太常见而对搜索无用。(总之,token是文档文本的原片段,而词素被认为是有用的索引和搜索词。)Vastbase使用词典执行这一步,且提供了各种标准的词典。

    • 保存搜索优化后的预处理文档。比如,每个文档可以呈现为标准化词素的有序组合。伴随词素,通常还需要存储词素位置信息以用于邻近排序。因此文档包含的查询词越密集其排序越高。

  • 词典能够对token如何标准化做到细粒度控制。使用合适的词典,可以定义不被索引的停用词。

  • 数据类型tsvector用于存储预处理文档,tsquery用于存储查询条件,详细请参见章节“文本搜索类型”。为这些数据类型提供的函数和操作符请参见章节“文本检索函数和操作符”。其中最重要的是匹配运算符@@,将在章节“基本文本匹配”中介绍。