达梦数据库系列—38.全文检索

目录

创建全文索引

分词参数

更新全文索引

全文检索

删除全文索引


对于非结构化数据,即全文数据,要想实现检索,一般都是采用模糊查询的方式实现的。这种方式不仅速度慢,而且容易将汉字错误切分,于是产生了全文检索技术。

创建全文索引后全文索引未插入任何索引信息。当用户填充全文索引时,系统才将定义了全文索引的文本列的内容进行分词,并根据分词结果填充索引。

创建全文索引

CREATE CONTEXT INDEX cti_address ON person.address (address1) LEXER DEFAULT_LEXER;

索引信息会保存到 ctisys 模式下的 SYSCONTEXTINDEXES 系统表中。

SYSOBJECTS 系统表会生成四个辅助表:

 CTI$INDEX_NAME$I表结构

序号

字段名

类型

长度

精度

刻度

说明

1

WID

BIGINT

8

19

0

词 ID

2

WORD

VARCHAR

64

64

0

词文本,相同的词重复存储

3

TYPE

SMALLINT

2

5

0

词类型

4

FIRSTID

ROWID

8

19

0

开始 ROWID,用于范围查找

5

LASTID

ROWID

8

19

0

结束 ROWID

6

COUNT

INTEGER

4

10

0

词所在的文档数(即 ROWID 的个数)

7

ID_INFO

VARBINARY

4000

4000

0

保存所在文档所有的 ROWID,连续存放

 CTI$INDEX_NAME$P表结构

序号

字段名

类型

长度

精度

刻度

说明

1

PND_ROWID

ROWID

8

19

0

原表记录的 ROWID

2

PND_TYPE

SMALLINT

2

5

0

INS/UPD/DEL 类型

cluster key

...

...

...

...

原表上的自定义聚集主键

 CTI$INDEX_NAME$N表结构

序号

字段名

类型

长度

精度

刻度

说明

1

N_DOCID

ROWID

8

19

0

与原表 ROWID

2

N_ROWID

ROWID

8

19

0

原表记录 ROWID

cluster key

...

...

...

...

原表上的自定义聚集主键

 CTI$INDEX_NAME$D表结构

序号

字段名

类型

长度

精度

刻度

说明

1

DOCID

ROWID

8

19

0

待删除词的 DOCID

分词参数

  1. CHINESE_LEXER,中文最少分词;
  2. CHINESE_VGRAM_LEXER,机械双字分词;
  3. CHINESE_FP_LEXER,中文最多分词;
  4. ENGLISH_LEXER,英文分词;
  5. DEFAULT_LEXER,默认分词,为中文最少分词。

中文最多分词:可以将存在二义性的词划分出来,例如:“和服装”会生成“和”、“和服”、“服”、“服装”和“装”。那么在查询其中任何一个词的时候都可以检索到该文本。

中文最少分词:最少分词,其消除了存在二义性的词,即前面举例的文本分词的结果为“和”、“服装”两个词,这样可以减少大量冗余词的存储,能进行更准确的匹配。

英文分词:即根据英文分隔符的分词,对超过 32 个字节的英文单词进行了拆分处理。

更新全文索引

完全更新

删除原有的全文索引,对基表进行全表扫描,逐一重构索引信息。

  ALTER CONTEXT INDEX cti_address ON person.address REBUILD;

增量更新

增量更新只对新发生改变的数据进行重新分词生成索引信息。

  ALTER CONTEXT INDEX cti_address ON person.address INCREMENT;

全文检索

  1. 在 CONTAINS 谓词内,支持AND、OR 和 AND NOT

  SELECT * FROM person.address WHERE CONTAINS(address1, '洪山区' AND '太阳城');

  1. 支持单词或者句子的检索

  SELECT * FROM person.address WHERE CONTAINS(address1, '江汉区发展大道');

3、检索条件子句可以和其他子句共同组成 WHERE 的检索条件

  SELECT * FROM person.address WHERE CONTAINS(address1, '洪山区') AND city LIKE '%武汉市%';

删除全文索引

删除全文索引时,数据字典中相应的索引信息和全文索引内容都会被删除。

  DROP CONTEXT INDEX cti_address ON person.address;

select * from ctisys.SYSCONTEXTINDEXES;

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

范德彪的蕉

天不生我奥德彪,非洲无人拉香蕉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值