更新时间:2020-08-05 15:25
分析型数据库MySQL版支持通过以下语法进行全文检索,在已经创建全文索引的col_name列中,检索words关键词。
SELECT
[ [ ALL | DISTINCT ] | select_expr [ AS output_name ] [, ...] ]
[ FROM table_reference [, ...] ]
[ WHERE match(column_name[, …]) against('words') ]
match(column_name[, …])
已经在建表语句中创建了全文索引的列的名字,可以填写一个列名也可以填写多个列名。比如 match(body)表示只在body这一列中进行检索,match(title, body)表示在title、body两列中分别进行检索。
against('words')
进行检索的关键词,比如against(’浙江省杭州市’)表示要检索浙江省杭州市。
对ARTICLES_TEST表中AUTHOR、TITLE和BODY三列分别创建全文索引,建表语句如下
CREATE TABLE articles_test (
id bigint COMMENT '',
author varchar COMMENT '',
title varchar COMMENT '',
body varchar COMMENT '',
comment varchar COMMENT '',
create_time timestamp COMMENT '',
FULLTEXT INDEX author_fulltext (author),
FULLTEXT INDEX body_fulltext (body),
FULLTEXT INDEX title_fulltext (title),
PRIMARY KEY (id)
)
PARTITION BY HASH KEY(id)
TABLEGROUP test_group
COMMENT '';
ARTICLES_TEST表中插入如下数据
insert into articles_test (id, author, title, body, comment, create_time) values(0, '张三', '浙江省杭州市春天美景推荐', '浙江省杭州市拥有美丽的西湖,是全国有名的风景胜地,春天的景色尤其迷人', '好地方', '2018-02-01 10:10:13');
insert into articles_test (id, author, title, body, comment, create_time) values(1, '张三', '江西九江夏天美丽景色', '庐山风景区坐落于江西九江,北濒长江,南傍鄱阳湖,素有“匡庐奇秀甲天下山”之美称。', '好地方', '2018-09-13 10:10:13');
insert into articles_test (id, author, title, body, comment, create_time) values(2, '李四', 'x省秋天美丽景色', '那山,那水,那满眼的绿,那不同于红砖白墙的色彩在华山烨烨生辉', '好地方', '2018-09-30 10:10:13');
insert into articles_test (id, author, title, body, comment, create_time) values(3, '王五', '《建国大业》简介', '中华人民共和国位于亚洲东部,太平洋西岸,是工人阶级领导的、以工农联盟为基础的人民民主专政的社会主义国家,成立于1949年(己丑年)10月1日', '国富民强', '2018-10-18 10:10:13');
insert into articles_test (id, author, title, body, comment, create_time) values(4, '王五', '地理信息大全', '共和国山地、高原和丘陵约占陆地面积的67%,盆地和平原约占陆地面积的33%。山脉多呈东西和东北一西南走向', '国富民强', '2018-09-30 23:10:13');
insert into articles_test (id, author, title, body, comment, create_time) values(5, '李四', '浙江杭州秋天哪里风景最美', '杭州一年中最美的季节不是春天吗?这个我不辩驳,也承认杭州的春天确实很美,我也很喜欢春天这个季节的杭州城。但是,和火红般的秋季比起来,我还是更喜欢秋天的杭州城。', '好地方', '2018-02-01 10:10:13');
insert into articles_test (id, author, title, body, comment, create_time) values(9, '李四', '浙江杭州千岛湖', '梅峰岛是千岛湖风景区登高观湖揽胜的最佳处,素有“不上梅峰观群岛,不识千岛真面目”', '好地方', '2018-02-01 10:10:13');
在BODY中检索浙江省杭州市
select * from articles_test where match(body) against('浙江省杭州市');
在TITLE、BODY两列中检索春天
select * from articles_test where match(title, body) against('春天');
定义了全文检索的列,仅支持match() against()
操作,不支持=
、!=
、范围查询、is null
、is not null
以及like
等操作符。
可以在检索语法中使用特殊字符+
、-
、&
、|
、!
、( )
、{ }
、[ ]
、^
、"
、~
、*
、?
、:
、\
、/
,但需要对特殊字符进行转义处理。
例如,需要检索包含“春天/美景”
的数据,错误写法为match(title) against('春天 / 美景' )
,正确写法为match(title) against('春天 \\/ 美景')
。
带有全文检索条件的表,不能作为left join
的右表。建议将left join
改为join
或者将右表改为左表。
全文检索条件match() against()
不能放在子查询外作为子查询后的过滤条件,如:
select * from (
select id, substr(text, 4) as text
from tbl
) A
where match(A.text) against('浙江省杭州市');
在文档使用中是否遇到以下问题
更多建议
匿名提交