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