Oracle 中地理数据库内 ArcSDE XML 列的语言设置
如果要通过某 XML 列中的内容对表进行查询,请使用 SQL*Plus 检查将要用于语言分析的默认语法分析程序是否存在文本索引;当该列包含的 XML 文档中的文本使用非英语编写时,此操作尤为重要。如果 ArcSDE DBTUNE 表中未提供自定义设置,将由默认 Oracle 文本参数决定为 ArcSDE XML 列创建文本索引的方法。
用于文本索引的默认对象由 ctxsys 用户所有并且针对数据库安装创建,而不是针对各个数据库创建。这些默认对象的属性基于安装 Oracle 时的语言设置;请参阅《Oracle 文本参考》(Oracle Text Reference) 中有关系统定义的优先级和系统参数部分,以了解在您的地理数据库版本中设置这些属性的方法。
对 ArcSDE XML 列有影响的 Oracle 参数包括 DEFAULT_LEXER、DEFAULT_STOPLIST、DEFAULT_STORAGE、DEFAULT_WORDLIST 和 DEFAULT_INDEX_MEMORY。
默认情况下,通常将这些参数设置为具有相同名称(由 ctxsys 用户所有)或合适值的系统定义的优先级。例如,通常将 DEFAULT_LEXER 设置为使用 CTXSYS.DEFAULT_LEXER 优先级。然而,组织中的某些用户可能先前将 Oracle 配置为默认情况下使用自定义优先级代替。
对于许多西欧语言以及未提供特定语言语法分析程序的语言,CTXSYS.DEFAULT_LEXER 优先级通常使用 BASIC_LEXER 语法分析程序;CTXSYS.DEFAULT_WORDLIST 优先级常常使用 BASIC_WORDLIST 词表。
要为某些西欧语言成功建立索引并进行搜索,则需要特定的词表设置。例如,如果您的语言是法语,请确保将 BASIC_WORDLIST 优先级的 stemmer 和 fuzzy_match 属性设置为法语。
对 Oracle 中的当前文本设置进行检查并参阅《Oracle 文本参考》(Oracle Text Reference) 后,还可以自定义用于建立 XML 文档索引的设置。这需要在 Oracle 中创建合适的优先级,然后使用 ArcSDE DBTUNE 参数 XML_IDX_INDEX_TEXT 引用这些参数。然后在创建 XML 列时,使用包含自定义 XML_IDX_INDEX_TEXT 参数的 DBTUNE 关键字。对于 ArcIMS 元数据服务,可以在 ArcXML 配置文件中引用 DBTUNE 参数。
自定义语法分析程序
根据 XML 文档的语言以及 Oracle 安装时的设置不同,可能并未将 DEFAULT_LEXER 参数配置为使用最适合于您的语法分析程序。要为 XML 文档顺利建立索引,您必须针对自己的语言正确设置语法分析程序的优先级。
例如,如果您正在使用的语言为泰语,而 Oracle 并不提供泰语语法分析程序,那么您可以将首选 DEFAULT_LEXER 设置为 BASIC_LEXER 语法分析程序。BASIC_LEXER 仅使用空格为文本建立索引并进行搜索,这可能不会为像泰语这样的语言提供最佳结果。如果 XML 文档按 UTF-8 方式编码,并且您使用的是 Oracle 10g 或较新版本,那么使用 WORLD_LEXER 结果可能更好。通过 ArcIMS 元数据服务发布到 ArcSDE XML 列的所有 XML 文档均将按 UTF-8 方式编码。
设定自定义优先级之前查看系统提供的文本对象可能会有帮助,举例来说,这样做可以确保您的 Oracle 安装程序提供必要的语法分析程序。
如果在 XML_IDX_INDEX_TEXT DBTUNE 参数中为 XML 列设置了语言分析程序的使用优先级,那么您在创建 XML 列时便可使用该优先级。优先级的名称始终要以创建该优先级的用户名称开头。任何用户均可使用其他用户创建的文本优先级。
如果可以使用 BASIC_LEXER 为 XML 文档建立索引,则举例来说,您可能想要创建自定义语法分析器以将包含非字母数字字符的文本合并为一个词。通过使用 BASIC_LEXER 的 printjoins 属性可以完成此操作,而且这对于使用标点的地名(例如 Coeur d'Alene)进行标准化索引和搜索时将十分有用。
使用 BASIC_LEXER 中包含撇号字符的 skipjoin 属性创建自定义语法分析程序时,会将 Coeur d'Alene 的索引创建为 Coeur dAlene。同样,任何使用附加撇号对此地点的不正确拼写(例如,C'oeur d'Alene)都将以 Coeur dAlene 形式创建索引,这样做的目的是为了产生更好的搜索结果。例如,您可以创建类似下面的文本优先级:
begin ctx_ddl.create_preference('BASIC_LEX_SKIP', 'BASIC_LEXER'); ctx_ddl.set_attribute('BASIC_LEX_SKIP', 'skipjoins', ''''); end; /
当更改标点建立索引的方法时一定要注意。为 XML 文档中的所有文本建立索引时,将使用相同优先级。不同 XML 元素之间的值可能以不同的方式使用标点。
如果 DEFAULT_LEXER 正确设置为使用 BASIC_LEXER,但 BASIC_LEXER 的属性没有针对您的语言进行正确设置,则可能还需要自定义语法分析程序优先级。必须针对您的语言适当设置索引词干、复合词索引、替换拼写和新德语拼写的 BASIC_LEXER 属性,从而为 XML 文档建立正确的索引。这对于西欧语言尤其重要。在《Oracle 文本参考》(Oracle Text Reference) 中针对您的语言检查这些属性是否具有合适的值之后,按照上面的示例创建自定义语法分析程序优先级,然后将其引用到 XML_IDX_INDEX_TEXT DBTUNE 参数中。
自定义词表或非索引字表
根据 XML 文档的语言和 Oracle 安装时的设置不同,DEFAULT_WORDLIST 和 DEFAULT_STOPLIST 优先级可能未根据您的语言进行正确配置。
要成功搜索 XML 文档,必须针对您的语言正确设置词表优先级。这对于西欧语言尤其重要,其中 BASIC_WORDLIST 优先级必须为词干匹配和模糊匹配设置正确的语言。
非索引字表优先级控制 XML 文档中不建立索引的词,因此,不可用于搜索。非索引字表可用于多种语言。您还可以自定义非索引字表,如果这适合您的具体情况。
在“Oracle 文本参考”中检查语言设置是否具有合适的值之后,创建自定义优先级,然后将其添加到 XML_IDX_INDEX_TEXT DBTUNE 参数的值。