GBase 8s Excalibur Text Search DataBlade 模块将错误消息写入上一部分中描述的跟踪文件。消息包含导致错误的行的行标识。可以使用行标识从表中选择违规行,纠正文档问题,然后使用纠正后的文档在表中更新或重新插入该行。
如果指定了 FILTER 索引参数的 STOP_ON_ERROR,那么您将无法在解决所有过滤问题之前完成该语句的执行。也就是说,如果执行 CREATE INDEX 语句来在当前包含行的表上创建索引,那么只有在所有现有文档都不存在过滤问题之后才可以创建该索引。同样,如果执行 INSERT 语句来向已拥有 etx 索引的表中插入新行,那么只有在所有新文档都不存在过滤问题之后才可以完成该 INSERT 语句。
如果指定 CONTINUE_ON_ERROR,那么过滤错误不会停止 CREATE INDEX、INSERT 或 UPDATE 语句的执行。但是,如果在过滤文档时遇到错误,那么未过滤的文档以及所有格式信息都会被添加到索引中。当执行完语句之后,会将其文档未被过滤的所有行的列表写入跟踪文件。您可以使用行标识列表先纠正文档问题,然后再更新行。在更新表中的这些行的同时,也会更新索引中的相应项目。在纠正了原始过滤问题之后,新的索引条目将包含过滤文档。
以下示例显示了一种方法以在创建索引之后纠正过滤问题。
假设您在名为 reports 的表的 abstract 列上创建了一个 etx 索引。您还指定了 FILTER=CONTINUE_ON_ERROR,以便对该列中的文档进行过滤。abstract 列的数据类型是 BLOB,该表包含 100 行。
尽管 CREATE INDEX 语句已成功执行,但是跟踪日志指示第 65 行存在过滤问题。也就是说,第 65 行的 abstract 列中的文档在添加到索引之前未进行过滤;其所有格式信息与它一同被添加到索引中。
SELECT LoToFile (abstract, '/tmp/outfile', 'client') FROM my_table WHERE rowid = 65;
UPDATE my_table SET abstract = FileToCLOB ('/tmp/infile' , 'client') WHERE rowid = 65;
更新该表中的 abstract 列的同时,也在更新在该列上构建的 etx 索引。上一示例的 abstract 列上的索引反映了对第 65 行中数据的更改。