达梦全文索引

达梦全文索引,全部参照官方文档。

  1. 现有的数据库系统,绝大多数是以结构化数据为检索的主要目标,因此实现相对简单。比如数值检索,可以建立一张排序好的索引表,这样速度可以得到提高。但对于非结构化数据,即全文数据,要想实现检索,一般都是采用模糊查询的方式实现的。这种方式不仅速度慢,而且容易将汉字错误切分,于是产生了全文检索技术。
  2. DM全文检索根据已有词库建立全文索引,文本查询完全在索引上进行。全文索引为在字符串数据中进行复杂的词搜索提供了有效支持。
  3. 用户可以在指定表的文本列上创建和删除全文索引。创建全文索引后全文索引未插入任何索引信息。当用户填充全文索引时,系统才将定义了全文索引的文本列的内容进行分词,并根据分词结果填充索引。用户可以在进行全文索引填充的列上使用CONTAINS谓词进行全文检索。
  4. 在创建全文索引成功后,假设索引名为INDEX_NAME,则系统会自动产生如下相关的辅助表(后面简称I表、P表、N表、D表):CTI$INDEX_NAME$I、CTI$INDEX_NAME$P、CTI$INDEX_NAME$N、CTI$INDEX_NAME$D。I表用于保存分词结果,记录词的基本信息,通过该信息就可以快速定位到该词的基表记录;P表用于保存基表发生的增量数据变化,用于修改全文索引时的增量填充;N表用于保存原表记录rowid和新词记录的docid的映射关系;D表保存了所有将被删除的docid,被删除的docid即将不能通过全文索引查询到。另外,如果原表有自定义聚集主键,那么P表和N表会将该自定义聚集主键列“复制到”各自表中。(完全没看懂)
  5. DM全文索引创建的过程中,用户可以为分词器定义分词参数,即控制分词器分词的数量,包括五种分词参数:CHINESE_LEXER(中文最少分词)、CHINESE_VGRAM_LEXER(机械双字分词)、CHINESE_FP_LEXER(中文最多分词)、ENGLISH_LEXER(英文分词)、DEFAULT_LEXER(默认分词,为中文最少分词)。如:CREATE CONTEXT INDEX CTX ON TEST(B) LEXER DEFAULT_LEXER;指定中文分词可以切分英文,但指定英文分词参数不可以切分中文,所以使用英文分词算法对中文文本进行分词时,分词结果将为空;中文最多分词可以将存在二义性的词划分出来,例如“和服装”会生成“和”、“和服”、“服”、“服装”和“装”。那么在查询其中任何一个词的时候都可以检索到该文本,与之相应的是最少分词,其消除了存在二义性的词,即将“和服装”分成“和”、“服装”两个词,这样可以减少大量冗余词的存储,能进行更准确的匹配;英文分词即根据英文分隔符的分词,对超过32个字节的英文单词进行了拆分处理。
  6. 全文检索的中文分词依赖系统词库,该词库是只读的,不允许修改。
  7. 在DM中,全文索引必须在基表上定义,而不能在系统表、视图、临时表、列存储表、外部表上定义。同一列只能创建一个全文索引。DM定义全文索引时,不需要在表上先建立主关键字索引,创建全文索引的列类型可以为CHAR、CHARACTER、VARCHAR、VARCHAR2、LONGVARCHAR、TEXT或CLOB。DM的全文索引现只支持简体中文和英文语言。
  8. 全文索引本质是借助辅助关系表存储索引数据。当对基表执行数据更新操作后,数据并不会立刻填充到辅助表中,需要用户主动同步数据用以更新全文索引,未同步到辅助表中的记录将无法通过全文索引查询到结果。
  9. 全文索引的更新方式分为两种:完全更新和增量更新。完全更新:删除原有的全文索引,对基表进行全表扫描,逐一重构索引信息。在创建全文索引成功后,需要完全更新全文索引才可以执行有效的全文检索。完全更新没有次数限制,用户可以根据需要在增量更新或完全更新失败以及发生系统故障后执行完全更新,如:ALTER CONTEXT INDEX CTX ON TAB_NAME REBUILD;,另外,完全更新由于完全丢弃辅助表已有数据,重新开始对基表数据进行分词填充到辅助表,因此服务器允许这种情况下更改分词算法。如:ALTER CONTEXT INDEX CTX ON TAB_NAME REBUILD LEXER CHINESE_FP_LEXER;;增量更新:在上一次完全更新之后,表数据发生了变化,就可以使用增量更新来更新索引,增量更新只对新发生改变的数据进行重新分词生成索引信息,所以代价较小,如:ALTER CONTEXT INDEX CTX ON TAB_NAME INCREMENT;。对全文索引的基表进行数据的增删改操作时,会将该数据的操作类型和ROWID信息保存到CTI$INDEX_NAME$P表中。DM在执行更新全文索引的过程中,若发生任何错误,服务器将会回滚到最近一次事务提交成功时的状态。增量更新还有一种特殊状态,实时自动增量更新,即在创建全文索引时指定同步方式为“SYNC TRANSACTION”,此种方式不需要用户手动更新全文索引,而是在每次事务提交时由服务器自动完成增量更新的动作,如:CREATE CONTEXT INDEX CTX ON TEST(B) SYNC TRANSACTION;
  10. 全文检索采用的分词算法与全文索引数据同步时采用的分词算法保持一致,用户可以通过系统表“CTISYS.SYSCONTEXTINDEXES”查询“WSEG_TYPE”得知全文索引的分词算法,其中0表示CHINESE_LEXER和DEFAULT_LEXER,1表示CHINESE_FP_LEXER,2表示ENGLISH_LEXER,3表示CHINESE_VGRAM_LEXER。
  11. 全文检索时首先对查询关键字或句子进行分词,并将分词结果在I表中进行匹配,然后将匹配结果返回。DM8支持对中英文关键字或者句子的布尔查询。
  12. 全文检索支持的检索类型有:支持英文单词的检索(单词不区分大小写);支持全角英文的检索;支持常见中文词语的检索;支持常见单个汉字词的检索;支持简体中文长句子的检索;支持中英文混合的检索。
  13. 全文检索支持的检索方式有:在CONTAINS谓词内支持AND、OR和AND NOT的短语查询组合条件,如:SELECT * FROM TAB_NAME WHERE CONTAINS (COL_NAME, ‘XX’ AND ‘YY’);;全文检索支持单词或句子的检索,如:SELECT * FROM TAB_NAME WHERE CONTAINS (COL_NAME,’XXXX’);;不支持模糊方式的全文检索,如:SELECT * FROM TAB_NAME WHERE CONTAINS(COL_NAME,’XX*’);(我寻思这种方式不就直接写’XX’就行了嘛?);检索条件子句可以和其它子句共同组成WHERE的检索条件,如:SELECT * FROM TAB_NAME WHERE CONTAINS (COL_NAME,’XX’) AND WHERE_STMT;
  14. DM全文检索时对查询的文本做了预处理,首先根据词文本进行最少分词,并依据词频信息找出查询关键字,然后对这些关键字进行优先级排序,这样可以在第一次检索时找出所需文本的最小结果集,然后在该结果集的基础上再进行依次筛选,最终获得查询文本,这样能较大的提高查询性能。
  15. 删除全文索引时,数据字典中相应的索引信息和全文索引内容都会被删除。删除索引有两种方式:使用语句删除和当模式对象发生改变时系统自动删除。第一种方式仅删除指定的基表的全文索引信息。如:DROP CONTEXT INDEX CTX ON TABLE TAB_NAME;;第二种方式会删除模式对象(如数据库、基表等)上的所有全文索引。全文索引一旦删除就不能回滚,基于该表的全文检索就会失败,只能通过重新构建获得新的全文索引。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值