Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 查询和修改数据 » 查询数据 » 文本配置对象

 

文本配置对象设置

SQL Anywhere 提供两种缺省文本配置对象,即与非 NCHAR 数据一起使用的 default_char 以及 default_nchar。有关其设置的信息,请参见缺省文本配置对象

下表说明了文本配置对象设置、各种设置如何影响索引内容以及如何解释全文搜索查询。有关文本配置对象的示例以及它们对文本索引和全文搜索的影响,请参见文本配置对象示例

  • 术语断开器算法 (TERM BREAKER)   TERM BREAKER 设置指定将字符串分解为术语时所使用的算法。可以选择 GENERIC(缺省设置)以存储术语,或选择 NGRAM 以存储 n 元语法词。n 元语法词 是一组长度为 n 的字符,其中 n 是 MAXIMUM TERM LENGTH 的值。

    无论指定哪种术语断开器,数据库服务器都将术语插入文本索引时术语的原始位置信息记录在文本索引中。如果是 n 元语法词,则存储 n 元语法词的位置信息,而不是原始术语的位置信息。

    TERM BREAKER 对文本索引的影响 TERM BREAKER 对查询术语的影响

    GENERIC 文本索引   构建 GENERIC 文本索引(缺省设置)时,数据库服务器会将出现在非字母数字字符之间的字母数字字符组处理为术语。定义术语后,超出术语长度设置的术语和在非索引字表中找到的术语将只进行计数而不插入到文本索引当中。

    GENERIC 文本索引的性能可能要高于 NGRAM 文本索引。但无法对 GENERIC 文本索引执行模糊搜索。

    NGRAM 文本索引   构建 NGRAM 文本索引时,数据库服务器会将非字母数字字符之间的任意一组字母数字字符处理为术语。定义术语后,数据库服务器将术语分解为 n 元语法词。这样便可放弃长度小于 n 的术语以及非索引字表中的 n 元语法词。

    例如,对于 MAXIMUM TERM LENGTH 为 3 的 NGRAM 文本索引,字符串 'my red table' 在文本索引中表示为以下 n 元语法词:red tab abl ble。

    GENERIC 文本索引   查询 GENERIC 文本索引时,将按照术语已建立索引的方式来处理查询字符串中的术语。通过比较查询术语和文本索引中的术语来执行匹配。

    NGRAM 文本索引   查询 NGRAM 文本索引时,将按照术语已建立索引的方式来处理查询字符串中的术语。通过比较查询术语中的 n 元语法词和索引术语中的 n 元语法词来执行匹配。

  • 最小术语长度设置 (MINIMUM TERM LENGTH)   MINIMUM TERM LENGTH 设置指定插入到索引中的术语或在全文查询中搜索的术语的最小长度(以字符为单位)。MINIMUM TERM LENGTH 不可用于 NGRAM 文本索引。

    MINIMUM TERM LENGTH 对于前缀搜索有特殊含义。请参见前缀搜索

    MINIMUM TERM LENGTH 的值必须大于 0。如果将其设置为大于 MAXIMUM TERM LENGTH,则 MAXIMUM TERM LENGTH 会自动调整为与 MINIMUM TERM LENGTH 相等。

    MINIMUM TERM LENGTH 的缺省值从缺省文本配置对象的设置中获得,通常为 1。请参见缺省文本配置对象

    MINIMUM TERM LENGTH 对文本索引的影响 MINIMUM TERM LENGTH 对查询术语的影响

    GENERIC 文本索引   对于 GENERIC 文本索引,长度小于 MINIMUM TERM LENGTH 的单词将不会包含在文本索引之中。

    NGRAM 文本索引   对于 NGRAM 文本索引,将忽略此设置。

    GENERIC 文本索引   查询 GENERIC 文本索引时,将忽略长度小于 MINIMUM TERM LENGTH 的查询术语,因为它们不会在文本索引中存在。

    NGRAM 文本索引   MINIMUM TERM LENGTH 的设置对 NGRAM 文本索引上的全文查询没有影响。

  • 最大术语长度设置 (MAXIMUM TERM LENGTH)   根据术语断开器算法的不同,MAXIMUM TERM LENGTH 设置的使用方法也不同。

    MAXIMUM TERM LENGTH 的值必须小于或等于 60。如果将其设置为小于 MINIMUM TERM LENGTH,则 MINIMUM TERM LENGTH 会自动调整为与 MAXIMUM TERM LENGTH 相等。

    此设置的缺省值从缺省文本配置对象的设置中获得,通常为 20。请参见缺省文本配置对象

    MAXIMUM TERM LENGTH 对文本索引的影响 MAXIMUM TERM LENGTH 对查询术语的影响

    GENERIC 文本索引   对于 GENERIC 文本索引,MAXIMUM TERM LENGTH 指定插入到文本索引中的术语的最大长度(以字符为单位)。

    NGRAM 文本索引   对于 NGRAM 文本索引,MAXIMUM TERM LENGTH 用于确定术语分解后形成的 n 元语法词的长度。如何选择适当的 MAXIMUM TERM LENGTH 长度取决于相应的语言。对于英文,典型值为 4 个或 5 个字符;对于中文,典型值为 2 个或 3 个字符。

    GENERIC 文本索引   对于 GENERIC 文本索引,将忽略长度大于 MAXIMUM TERM LENGTH 的查询术语,因为它们不会在文本索引中存在。

    NGRAM 文本索引   对于 NGRAM 文本索引,查询术语将分解成长度为 n 的 n 元语法词,其中 n 与 MAXIMUM TERM LENGTH 的值相同。然后数据库服务器使用 n 元语法词搜索文本索引。长度小于 MAXIMUM TERM LENGTH 的术语将被忽略,因为它们与文本索引中的 n 元语法词不匹配。

  • 非索引字表设置 (STOPLIST)   非索引字表设置指定不得对其建立索引的术语。

    此设置的缺省值从缺省文本配置对象的设置中获得,通常含有空的非索引字表。请参见缺省文本配置对象

    STOPLIST 对文本索引的影响 STOPLIST 对查询术语的影响

    GENERIC 文本索引   对于 GENERIC 文本索引,非索引字表中的术语不会插入到文本索引之中。

    NGRAM 文本索引   对于 GENERIC 文本索引,由非索引字表中的术语形成的 n 元语法词不会包含在文本索引之中。

    GENERIC 文本索引   对于 GENERIC 文本索引,将忽略非索引字表中的查询术语,因为它们不会在文本索引中存在。

    NGRAM 文本索引   非索引字表中的术语分解为 n 元语法词,然后将 n 元语法词用于非索引字表。类似地,查询术语将分解为 n 元语法词,然后删除任何与非索引字表中的 n 元语法词相匹配的项目,因为它们不会在文本索引中存在。

    请认真考虑是否将术语置于非索引字表中。尤其注意不要将具有非字母数字字符(如撇号和横线)的单词包括在内。这些字符用作术语断开器。例如,单词 you'll(必须指定为 ['you''ll'])将被分解为 you 和 ll,并在非索引字表中存储为这两个术语。随后如果全文搜索 ['you'] 或 ['they''ll'],则会受到负面影响。

    对于 NGRAM 文本索引,非索引字表可能导致意外的结果,因为所储存的非索引字表实际上是 n 元语法词的形式,而不是指定的实际非索引字表术语形式。例如,对于 MAXIMUM TERM LENGTH 为 3 的 NGRAM 文本索引,如果指定 [STOPLIST 'there'],则以下 n 元语法词将存储为非索引字表:the her ere。这会影响查询任何包含 n 元语法词 the、her 和 ere 的术语的能力。

    注意

    指定字符串文字时的限制同样适用于非索引字表。例如,必须对撇号进行转义等。有关格式化字符串文字的详细信息,请参见字符串文字

    示例目录包含装载多种语言的非索引字表的示例代码。建议仅对 GENERIC 文本索引使用这些示例非索引字表。有关示例目录的位置,请参见示例目录

另请参见