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

SQL Anywhere 12.0.0 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 查询和修改数据 » 全文搜索 » 如何管理文本配置对象

 

文本配置对象设置

SQL Anywhere 提供两种缺省文本配置对象,即与 CHAR 数据一起使用的 default_char 以及与 NCHAR 和 CHAR 数据一起使用的 default_nchar。请注意,尽管 default_nchar 可以与任何数据一起使用,但需要执行字符集转换。有关 default_char 和 default_nchar 文本配置对象设置的信息,请参见缺省文本配置对象

您可以通过使用 sa_char_terms 和 sa_nchar_terms 系统过程测试文本配置对象是如何影响术语断开的。请参见sa_char_terms 系统过程sa_nchar_terms 系统过程

下表说明了文本配置对象的设置是如何影响索引内容,以及使用文本配置的文本索引如何解释全文搜索查询。相关示例,请参见文本配置对象示例

  • 外部前置过滤器算法 (PREFILTER)   前置过滤是从 Word、PDF、HTML 或 XML 之类的文件中提取文本数据的过程。在文本索引环境中,前置过滤允许只提取想要索引的数据,而避免索引不必要的内容,例如 HTML 标记。对于某些文档类型(例如 Microsoft Word 文档),需要使用前置过滤发挥全文索引的有用功能。

    SQL Anywhere 不提供内置的前置过滤器功能。但是,您可以创建外部前置过滤器库,根据需要执行前置过滤,然后修改文本配置对象来指向它。

    下表说明了 PREFILTER EXTERNAL NAME 的值对文本索引和查询字符串处理方式的影响。

    文本索引 查询字符串

    GENERIC 和 NGRAM 文本索引   外部前置过滤器获取一个输入值(文档)并根据前置过滤器库指定的规则进行过滤。结果文本将在建立或更新文本索引之前传递给术语断开器。

    GENERIC 和 NGRAM 文本索引   查询字符串不通过前置过滤器,因此 PREFILTER EXTERNAL NAME 子句的设置不会影响查询字符串。

    另请参见:外部前置过滤器库PREFILTER EXTERNAL NAME 子句,ALTER TEXT CONFIGURATION 语句

    SQL Anywhere 安装的 ExternalLibrariesFullText 目录中包含前置过滤器和术语断开器示例代码供您研究。该目录可在 Samples 目录下找到。关于 samples 目录的位置,请参见示例目录

  • 术语断开器算法 (TERM BREAKER)   TERM BREAKER 设置指定将字符串分解为术语时所使用的算法。可以选择 GENERIC 以存储术语,或选择 NGRAM 以存储 n 元语法词。对于 GENERIC,可以使用内置术语断开器算法,或外部术语断开器。请参见TERM BREAKER 子句,ALTER TEXT CONFIGURATION 语句

    下表说明了 TERM BREAKER 的值对文本索引和查询字符串处理方式的影响。

    文本索引 查询字符串
    • GENERIC 文本索引   GENERIC 文本索引的性能可能高于 NGRAM 文本索引。但无法对 GENERIC 文本索引执行模糊搜索。

      使用内置算法构建 GENERIC 文本索引时,数据库服务器会将出现在非字母数字字符之间的字母数字字符组处理为术语,并为其指定位置。

      当使用术语断开器外部库构建 GENERIC 文本索引时,术语及其位置由外部库定义。

      术语断开器识别术语后,超出术语长度限制的术语和在非索引字表中找到的术语将只进行计数而不插入到文本索引当中。

    • NGRAM 文本索引   n 元语法词 是一组长度为 n 的字符,其中 n 是 MAXIMUM TERM LENGTH 的值。

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

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

      对于 n 元语法词,则存储 n 元语法词的位置信息,而不是原始术语的位置信息。

    当分析 CONTAINS 查询时,数据库服务器将从查询字符串提取关键字和特殊字符,然后将术语断开器算法应用到其余的术语。例如,如果查询字符串是 'ab_cd* AND b*',则会提取 * 和关键字 AND,并且将字符串 ab_cd 和 b 交给术语断开器算法分别分析。

    有关全文搜索中关键字和特殊字符的更多信息,请参见CONTAINS 搜索条件

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

    • NGRAM 文本索引   查询 NGRAM 文本索引时,将按照术语已建立索引的方式来处理查询字符串中的术语。通过比较查询术语中的 n 元语法词和索引术语中的 n 元语法词来执行匹配。有关在 NGRAM 文本索引中如何执行前缀搜索的信息,请参见前缀搜索

    如果未定义,则会从缺省文本配置对象设置中获取 TERM BREAKER 的缺省值。如果在缺省文本配置对象中未定义术语断开器,则会使用内部术语断开器。请参见缺省文本配置对象

    另请参见: TERM BREAKER 子句,ALTER TEXT CONFIGURATION 语句.

  • 最小术语长度设置 (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 的值对文本索引和查询字符串处理方式的影响。

    文本索引 查询字符串

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

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

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

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

    另请参见: MINIMUM TERM LENGTH 子句,ALTER TEXT CONFIGURATION 语句.

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

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

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

    如果未定义,则会从缺省文本配置对象的设置中获取 MAXIMUM TERM LENGTH 的缺省值,通常为 20。请参见缺省文本配置对象

    下表说明了 MAXIMUM TERM LENGTH 的值对文本索引和查询字符串处理方式的影响。

    文本索引 查询字符串

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

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

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

    NGRAM 文本索引   对于 NGRAM 文本索引,查询术语将分解成长度为 n 的 n 元语法词,其中 n 与 MAXIMUM TERM LENGTH 的值相同。然后数据库服务器使用 n 元语法词搜索文本索引。长度小于 MAXIMUM TERM LENGTH 的术语将被忽略,因为它们与文本索引中的 n 元语法词不匹配。因此,除非参数是长度为 n 的前缀,否则邻近搜索不会工作。

    另请参见: MAXIMUM TERM LENGTH 子句,ALTER TEXT CONFIGURATION 语句.

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

    如果未定义,此设置的缺省值从缺省文本配置对象的设置中获得,>它通常带有一个空的非索引字表。请参见缺省文本配置对象

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

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

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

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

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

    执行分析时,文本配置对象中的设置将应用于非索引字表。也就是说会应用指定的术语断开器和最小/最大长度设置。

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

    注意

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

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

    另请参见: STOPLIST 子句,ALTER TEXT CONFIGURATION 语句.

  • 日期、时间和时间戳格式设置   创建文本配置对象时,当前连接的 date_format、time_format、timestamp_format 和 timestamp_with_time_zone_format 选项将与文本配置对象一同存储。这些选项的值控制如何为使用文本配置对象构建的文本索引格式化 DATE、TIME 和 TIMESTAMP 列。不能显式设置文本配置对象的这些选项值;其设置反映了创建文本配置对象的连接。但可以更改这些选项。请参见如何修改文本配置对象ALTER TEXT CONFIGURATION 语句的 SAVE OPTION VALUES 子句。

 另请参见