-------------------
非结构化数据文件:HTML、doc、pdf、txt、XML、zip 等多种文件格式
-------------------
1、创建全文检索语句
create table test(a int,b varchar(100),c datetime,d varchar(100));
(1)create fulltext index test_idx on test(b); --默认路径:/opt/gnode/userdata/gbase/test/metadata/
create fulltext index test_idx on test(b) index_data_path='/home/gbase/';
(2)create table test(a int,b varchar(100),c datetime,d varchar(100),fulltext test_idx (b)); --默认路径:/opt/gnode/userdata/gbase/test/metadata/
(3)create table test(a int,b varchar(100),c datetime,d varchar(100),fulltext test_idx (b) index_data_path='/home/gbase/'); --手动指定全文索引路径
(4)alter table test add fulltext index test_idx (b) index_data_path='/home/gbase/';
索引文件名:INSTANCE_DATABASE_TABLE_CXXXXX.FTD的索引目录
-------------------------------------------------------------------
INSTANCE: 建立全文索引所在GBase 8a实例名称
DATABASE: 建立全文索引表所在数据库名称
TABLE: 建立全文索引表名称
CXXXXX: 建立全文索引列编号
FTD: 全文索引目录标志
-------------------------------------------------------------------
2、查看索引
show index from test;
3、删除索引
drop index test_idx on test;
alter table test drop index test_idx;
4、更新索引
update index test_idx on test;
5、URI数据类型:URI数据类型通过为VARCHAR类型增加URI标识符来实现,URI的内容最长为2048字节
举例:
CREATE TABLE fturi (fturi varchar (2048) URI);
Insert into fturi values ('file:///home/fti/dat/txt/189.txt\r\nContent-Type:text/plain\r\n\r\n');
Insert into fturi values ('file:///tmp/fulltxt/subdirs_28323/e51029f0-e893-4836-a504-6d67804a6a0e\r\nContent-Length:5571\r\nLast-Modified:Thu, 18 Oct 2012 11:21:21 GMT\r\nContent-MD5:ce0690d74cad8a310fc769b9ceb00153\r\nContent-Type:application/xml;charset=utf8\r\n\r\n');
URI数据格式:其数据为多行文本,行与行间以一对回车符和换行符组合(“\r\n”)分隔,内容分作三部分:
6、词
检索的最小单位就是一个词,单词与单词之前通过空格分隔,对于西文单词之间的空格、换行符会直接被过滤掉,不作为索引词也不计算占用的位置。对于中文字符之间的空格,以及其他符号(像全角的标点符号例如“”,。!;¥【】等符号,特殊字符例如#,*,$等)也进行过滤,不作为索引词,但是建立索引时会记录这些符号所占用的位置,这会影响词距。
7、词序
可以指定查询的多个词之间是有序查询还是无序查询
8、词距
(1)指二个词之间间隔单词数,也包含被查询的首尾词
(2)对于中文来说,则词距为两个汉字之间间隔的字符数(字符包含汉字、标点、空格、符号等等,回车符略去不算)
(3)计算词距时,中英文之间的空格处理不同,英文之间的空格作为分隔符会被过滤掉而且不占位置,例如搜索“the great” 时这两个词的词距为2,而中文之间的空格则会占位,例如搜索“天 津”时,天津这两个字的词距为3,跟无空格的“天津”是不同的。
9、查询表达式
(1) 显式的与(AND)操作符‘&’,例如 hello & world
含义:所查询内容必须全部被包含
例如'hello & world',表示查询同时包含hello和world两个单词的内容。
(2) 隐式的与(AND)操作符‘空格’,例如'hello world'
含义:所查询内容必须全部被包含
例如'hello & world',表示查询同时包含hello和world两个单词的内容。
(3) 或(OR)操作符‘|’, 例如 hello | world
例如'hello | world',表示查询包含hello或者world单词的内容。
(4) 非(NOT)操作符‘-’, 例如 hello – world
'hello –world'表示查询包含hello但是不包含world单词的内容。
需要说明的是,如果只查询形如“-dog”的文字,而没有其他查询条件,则查询不能被执行,因为它差不多包括索引所有文档。
(5) 首字词操作符‘^’, 例如 ^hello
要想查询以某个词开头的信息,可在查询词前面加上^符号,注意^符号与词之间不能有空格。例如查询'^hello',表示查询以hello字开头的信息。
(6) 尾字词操作符‘$’, 例如 mouse$
要想查询以某个词结尾的信息,可在查询词后面加上$符号,注意$符号与
词之间不能有空格。例如查询'mouse$',表示查询以mouse字结尾的信息。
(7) 词组查询操作符 "",例如"南大"
双引号""中的内容,会被看成一个词组来查询。
例如,查询“南大” 表示查询的内容中,包含南大这个词组(即包含南,大两个字并且两字相邻,顺序为南大)
(8) 分组操作符(),例如( hello world ) & (cat | dog)
例如( hello world ) & (cat | dog) 可将多个查询条件分组查询,然后
将查询结果使用逻辑运算符(或、与、非)连接。
select count(*) from sms where contains(MB_Text, '"天津" | "培训班" - "水上"');
(9) 阀值匹配符 ‘/’, 例如 "the great wall is a wonderful place"/3
当查询多个关键词时,满足匹配数量的关键词。英文词以空格分割,中文以一个字为一个词,查询的内容需要使用引号""括起来。
例如查询语句条件为 "the great wall is a wonderful place"/3 指只要满足其中3 个查询的词即为符合条件。
(10) NEAR搜索函数 near((term1, term2), num ,order), 例如 near((great, place), 2, 1), num 表示词距,order 为 0 代表无词序, 为 1代表有词序
(11) 扩展选项,搜索表达式通过":"分作基本表达式和扩展选项两个部分,总长度的限制为255字符,其中扩展选项可以为空,目前扩展选项仅支持rank=tf,表示相关度算法采用词频而不是缺省的bm25算法。例如"南大: rank=tf" 表示搜索南大,相关度为词频。
10、NEAR 搜索函数
NEAR ((term1, term2), num[,Order])
term:为搜索词,无论是否有引号标识,都按照短语搜索,如near((北京,天津),10)等价于near(("北京","天津"),10),term 也可以是一个Near表达式,两个term 用逗号分割。英文为词,中文默认为单字。
NUM:表示词距数,非0 整数,词距(包括匹配词)
Order:表示词序。 为 0 代表无词序,为 1 代表有词序。Order 为可选项,默认值为0,表示无词序。
11、score评估函数
语法:
INT SCORE(N)
(1)该函数功能为全文检索对关键字的匹配程度所计算的分数,返回的值是全文查询函数CONTAINS 查询结果的权重值,值的大小跟全文检索评估算法有关,GBase 8a 全文检索的评估模式默认是BM25 算法,可以通过扩展选项"rank=tf"设置采用词频评估算法。SCORE 函数只能用于投影列、Groupby 和Orderby 子句中,否则报错。
score function can ONLY in select, group by or order by clause
(2)返回值为INT 类型,该数值为与其SCORE 标号一致的全文查询函数CONTAINS 查询结果权重, 如果没有与其SCORE 标号一致的全文查询函数
CONTAINS,则报出错误信息::not match the number of score func
(3)N - SCORE标号,整数类型, 该数值应与当前查询语句的Where子句中某一全文查询CONTAINS函数的SCORE标号一致。如果多个CONTAINS函数的SCORE标号均与其一致,则报出错误信息:
Incorrect arguments to CONTAINS FUNCTION - SCORE FLAG COLLISION




