返回首页

gbase数据、南大通用产品文档:GBase8aNEAR 搜索函数

更新日期:2024年09月11日

NEAR ((term1, term2), num[,Order])

term:
为搜索词,
无论是否有引号标识,
都按照短语搜索,
如near((北京,天津),10)
等价于near(("北京","天津"),10),
term 也可以是一个Near 表达式,
两个term 用
逗号分割。英文为词,中文默认为单字。

NUM:表示词距数,非0 整数,词距(包括匹配词)

Order:表示词序。 为 0 代表无词序,为 1 代表有词序。Order 为可选项,默
认值为0,表示无词序。
例如 near((great, place), 3,
1), 查找great 和place 两词词距不超过3,
按词序查询。

1.
文本匹配条件描述

按照参数order 输入值
无顺序包括所有查询词语
非0 整数 - 有顺序包括所有查询词语

匹配词词距不超出预期值(包括匹配词)

支持递归匹配,
每层递归结果均需要满足(1)(2)条件,
递归结果作为一个整体传
入下一次递归计算,其长度为匹配长度。
2.
搜索实例说明

输入查询语句 “near((cat, dog), 5, 1)"
文本“cat dog”--- 匹配,词序正确。
文本“dog cat”--- 不匹配,dog, cat 词序不匹配

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 949
文本“cat aaa bbb ccc ddd dog”---不匹配,cat,dog 之间有6 个词(包括匹
配词),超出匹配长度5

输入查询语句 “near((cat, dog), 5, 0)"
文本“cat dog”--- 匹配
文本“dog cat”--- 匹配,无词序要求。
文本“dog aaa bbb ccc ddd cat”---不匹配,dog,cat 之间有6 个词(包括匹
配词),超出匹配长度5

输入查询语句 "near( (near((cat, dog), 5, 1), mouse), 8, 0)"
文本“cat dog mouse”--- 匹配
文本“mouse cat dog”--- 匹配
文本“dog cat mouse”--- 不匹配,dog, cat 词序不匹配
文本“cat aaa bbb ccc ddd dog mouse” ---不匹配,cat,dog 词距为6,,超
出匹配长度5
文本“cat aaa bbb ccc dog aaa bbb ccc ddd mouse”---不匹配,cat, mouse
词距为10 超出匹配长度8
文本“cat aaa bbb
ccc
dog ddd mouse”---匹配, cat 和dog 词距未超出,cat
和mouse 词距未超出
本“mouse ddd cat aaa bbb ccc dog”---匹配, cat 和dog 词距未超出,mouse
和dog 词距未超出
以上为句法讲解的例子,下面以实际的示例说明。
示例

示例1:
要查询制作假文凭的垃圾短信内容。
gbase> SELECT MB_Text FROM sms WHERE contains(MB_Text, '"文凭"/2');
+--------------------------------------------------------------+
| text |
+--------------------------------------------------------------+
| 明天去公司办公柜里查找合同文件、档案和报销凭证。 |
| 本公司办理各种文*凭、证/件,绝对保真,联系电话:022-30088200。|
+--------------------------------------------------------------+

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 950
2 rows in set
从上面信息中发现正常的短信也查询出来了,我们改进一下查询方法。
gbase> SELECT MB_Text FROM sms WHERE contains(MB_Text, 'NEAR((文,凭),4,1)');
+---------------------------------------------------------------+
| text |
+---------------------------------------------------------------+
| 本公司办理各种文*凭、证/件,绝对保真,联系电话:022-30088200。|
+---------------------------------------------------------------+
1 row in set

示例2:查询包含南大两字,词距在4 的短信。
gbase> SELECT MB_Text FROM sms WHERE contains(MB_Text, '(NEAR((南,大),4,0))');


+--------------------------------------------------------------+
| MB_Text |
+--------------------------------------------------------------+
| 晚上去南大上英语课,在南大主楼115 房间 |
| 周末去天津博物馆参观,在南开区南门外大街公交车站集合 |
| 南大通用数据技术股份有限公司地址:... |
| 南大开设java 编程培训班,每周五晚上7:00-9:00 上课 |
+--------------------------------------------------------------+
4 rows in set
想查询包含南大两字、词距在4 并且以课字结尾的短信。
gbase> SELECT MB_Text FROM sms WHERE contains(MB_Text, '(NEAR((南,大),4,0))&课
$');
+-----------------------------------------------------+
| MB_Text |
+-----------------------------------------------------+
| 南大开设java 编程培训班,每周五晚上7:00-9:00 上课 |
+-----------------------------------------------------+
1 row in set

HIVE 引擎的分区表,
在INSERT 时仅指定各分区字段的名字,
分区值则由VALUES
子句或SELECT 子句来决定。
示例:动态分区INSERT
gbase> DROP TABLE IF EXISTS h3;
Query OK, 0 rows affected

gbase> CREATE TABLE h3(a INT, b INT) PARTITIONED BY (c INT, d INT) ENGINE='HIVE';
Query OK, 0 rows affected

gbase> INSERT INTO h3 PARTITION(c, d) values(1, 1, 100, 100);
Query OK, 1 row affected

gbase> INSERT INTO h3 PARTITION(c, d) values(2, 2, 200, 200);
Query OK, 1 row affected

gbase> SELECT * FROM h3 WHERE c > 0;
+------+------+------+------+
| a | b | c | d |
+------+------+------+------+
| 1 | 1 | 100 | 100 |
| 2 | 2 | 200 | 200 |
+------+------+------+------+
2 rows in set

gbase> DROP TABLE IF EXISTS h4;
Query OK, 0 rows affected

gbase> CREATE TABLE h4(a INT, b INT, c INT, d INT) ENGINE='HIVE';

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 758
Query OK, 0 rows affected

gbase> INSERT INTO h4 VALUES(3, 3, 200, 100);
Query OK, 1 row affected

gbase> INSERT INTO h4 VALUES(4, 4, 300, 300);
Query OK, 1 row affected

gbase> INSERT INTO h3 PARTITION(c, d) SELECT a, b, c, d FROM h4;
Query OK

gbase> SELECT * FROM h3 WHERE d > 0;
+------+------+------+------+
| a | b | c | d |
+------+------+------+------+
| 1 | 1 | 100 | 100 |
| 3 | 3 | 200 | 100 |
| 2 | 2 | 200 | 200 |
| 4 | 4 | 300 | 300 |
+------+------+------+------+
4 rows in set

-- 动态分区也可混合静态分区使用。
gbase> TRUNCATE TABLE h3;
Query OK

-- 下面这条插入语句,分区列c 使用静态分区(值为100),
-- 分区列d 使用动态分区(值为VALUES 中的200 和300)
gbase> INSERT INTO h3 PARTITION(c=100, d) values(1, 1, 200),(2, 2, 300);
Query OK, 1 row affected

gbase> SELECT * FROM h3 WHERE c > 0;
+------+------+------+------+
| a | b | c | d |
+------+------+------+------+
| 1 | 1 | 100 | 200 |
| 2 | 2 | 100 | 300 |
+------+------+------+------+
2 rows in set

-- 注意,不能出现父分区为动态,而子分区为静态的情况。
gbase> INSERT INTO h3 PARTITION(c, d=1000) values(1, 1, 200),(2, 2, 300);
ERROR ... Dynamic partition cannot be the parent of a static partition '1000'


GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 759



sword GCIDateTimeGetTime (
void *hndl,
GCIError *err,
GCIDateTime *datetime,
ub1 *hour,
ub1 *min,
ub1 *sec,
ub4 *fsec
);

获取GCIDateTime对象中的时间,包含亚秒。

参数
输入
/输出


hndlp
输入
上下文或者环境句柄
errhp
输入
错误信息句柄, 该接口调用失败时, 错误信息会存在该句柄上
datetime
输入
日期时间
hour
输出
单位: 时

GBase 8s GCI 接口使用指南

南大通用数据技术股份有限公司 90 参数
输入
/输出


min
输出
单位: 分
sec
输出
单位: 秒
fsec
输出
总共为5位

如果执行成功,返回GCI_SUCCESS,否则返回GCI_ERROR。