ADB支持通过SQL定义全文检索列实现全文检索功能, 全文检索列由多值列实现,分词器类型为nlp_tokenizer。

说明 全文检索不同于SQL中的like,全文检索是在SQL中通过分词搜索匹配;like是模糊匹配,只需要为字符串列创建索引即可。

创建表

通过以下SQL创建TEST3表,定义text列为多值列类型,分词器类型为nlp_tokenizer。

CREATE TABLE test3 (
    user_id BIGINT,
    city VARCHAR,
    text MULTIVALUE nlp_tokenizer 'ik' value_type 'varchar'
)
DISTRIBUTE BY HASH (user_id)

写入数据

通过以下SQL向TEST3表中写入测试数据。

insert into test3 values(1, 'HZ', '中华人民共和国');
insert into test3 values(2, 'BJ', 'AnalyticDB3.0是全新一代OLAP数据库');
insert into test3 values(3, 'SH', 'hello, world');
select * from test3 order by user_id;
+---------+------+--------------------------------+
| user_id | city | text                           |
+---------+------+------------------------------- +
|       1 | HZ   |中华人民共和国                   |
|       2 | BJ   |AnalyticDB3.0是全新一代OLAP数据库|
|       3 | SH   | hello, world                   |

检索查询

说明 全文检索中,默认将所有大写字母统一转换成小写字母。
select * from test3 where text in ('中华', '数据库');
+---------+------+--------------------------------+
| user_id | city | text                           |
+---------+------+--------------------------------+
|       1 | HZ   | 中华人民共和国                   |
|       2 | BJ   | AnalyticDB3.0是全新一代OLAP数据库|
select * from test3 where text in ('hello') and city != 'HZ';
+---------+------+--------------+
| user_id | city | text         |
+---------+------+--------------+
|       3 | SH   | hello, world |
select * from test3 where ref(text,0) in ('analyticdb');
+---------+------+-----------------------------------+
| user_id | city | text                              |
+---------+------+-----------------------------------+
|       2 | BJ   | AnalyticDB3.0是全新一代OLAP数据库   |
# 普通字符串列也可以进行like查询
mysql> select * from test3 where city like '%J%';
+---------+------+-----------------------------------+
| user_id | city | text                              |
+---------+------+-----------------------------------+
|       2 | BJ   | AnalyticDB3.0是全新一代OLAP数据库   |