DM8 全文检索
1.全文检索
DM
全文检索根据已有词库建立全文索引,文本查询完全在索引上进行。全文索引为在
字符串数据中进行复杂的词搜索提供了有效支持。
DM全文索引创建的过程中,用户可以为分词器定义分词参数,即控制分词器分词的数 量,包??5种分词参数:
-
CHINESE_LEXER,中文最少分词;
-
CHINESE_VGRAM_LEXER,机械双字分词;
-
CHINESE_FP_LEXER,中文最多分词;
-
ENGLISH_LEXER,英文分词;
-
DEFAULT_LEXER,默认分词,为中文最少分词。
2.创建全文索引
在
DM
中,全文索引必须在基表上定义,而不能在系统表、视图、临时表、列存储表、
外部表上定义。同一列只能创建一个全文索引。
DM
定义全文索引时,不需要在表上先建立
主关键字索弓
I
。仓
U
建全文索弓
I
的列类型可为
CHAR
、
CHARACTER
,
VARCHAR
、
VARCHAR2
、
LONGVARCHAR
、
TEXT
或
CLOB
,例如上节对
address
表创建的全文索弓
I
列为
VARCHAR
类
型。
DM
的全文索引现只支持简体中文、英文语言。较为详细的语法介绍可参考
《
DM8_SQL
语言使用手册》。
-- 查看
select * from CTISYS.SYSCONTEXTINDEXES ;
3.更新全文索引
文索引本质是借助辅助关系表存储索引数据。当对基表执行数据更新操作后,数据并
不会立刻填充到辅助表中,需要用户主动同步数据用以更新全文索引,未同步到辅助表中的
记录将无法通过全文索引查询到结果。
全文索引的更新包括两种方式:完全更新和增量更新。
完全更新
删除原有的全文索引,对基表进行全表扫描,逐一重构索引信息.
例如执行如下
SQL
可以对
address
表的全文索引进行完全更新:
ALTER CONTEXT INDEX cti_address ON person.address REBUILD;
增量更新
在上一次完全更新之后,表数据发生了变化,就可以使用增量更新来更新索引。
例如执行如下
SQL
可以对
address
表的全文索引进行增量更新:
ALTER CONTEXT INDEX cti_address ON person.address INCREMENT;
自动增量更新
CREATE
CONTEXT
INDEX
cti_address
ON
person
.
address
(
address1
)
LEXER
DEFAULT_LEXER
SYNC
TRANSACTION
;
4.使用全文索引
SELECT * FROM person.address WHERE CONTAINS(address1,'洪山区'AND '太阳城');
SELECT * FROM person.address WHERE CONTAINS(address1,'江汉区发展大道');
select * from PERSON.ADDRESS where CONTAINS(ADDRESS.ADDRESS1,'洪山区')
and city like '%武汉市%'
;
5.删除全文索引
DROP CONTEXT INDEX cti_address ON person.address;