mysql全文检索简单应用

本文介绍如何在MySQL中使用全文检索功能优化模板项查询,解决传统查询方式难以处理复杂条件的问题,并通过实例展示如何创建模板表、添加全文索引及执行查询语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求是这样的:项目中有一张模板表,模板项中有个大字段,存放这个模板具体的模板项信息以json字符串形式存放在该字段中,这样的好处是只有一张表,不用维护传统的模板表和模板项这两张表,而且查询时候的效率更高,应该只查询一张表嘛。不用进行连表查询。当然带来的缺点就是如果存在以模板项这个大字段的条件查询会很不方便。一开始经过讨论决定该字段制作保存和读取不存在针对该字段的条件查询,所有就这么做了。

但是后面由于需求的进一步细化,有个这么个需求:

当客户选择了具体的模板项后,要先查询之前的模板是否存在相同的模板项,如果存在校验不通过,尴尬了需要由模板项组成的条件查询需求。

一开始的想法是 where itemcode like  '%模板项A%' and  itemcode like  '%模板项B%'  itemcode like  '%模板项C%'  itemcode like  '%模板项D%' ...

后来发现不行 比如说有个模板A 包含:模板项A,模板项B

现在我要新建一个模板B包含:模板项A ,不和模板A重复模板项吧。但是通过like查询还是区分不了。

还好之前看MySQL有全文检索这个功能,在这小试了一把,具体实现如下:

创建模板表:

CREATE TABLE `enquiry_template_test` (
  `template_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '模板的id',
  `template_name` VARCHAR(60) COLLATE utf8_bin DEFAULT NULL COMMENT '模板名称',
  `company_id` BIGINT(20) DEFAULT NULL COMMENT '采购商公司',
  `company_name` VARCHAR(60) COLLATE utf8_bin DEFAULT NULL COMMENT '采购商公司名称',
  `item_code` TEXT COLLATE utf8_bin COMMENT '模板项信息',
  `valid_flag` TINYINT(4) DEFAULT '0' COMMENT '是否有效0有效,1失效',
  `created_time` DATETIME DEFAULT NULL COMMENT '创建时间',
  `user_id` BIGINT(20) NOT NULL COMMENT '创建人',
  PRIMARY KEY (`template_id`),
  FULLTEXT (item_code)
) ENGINE=MYISAM AUTO_INCREMENT=1130 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='模板表信息'

注意:mysql要使用全文检索,搜索引擎为MYISAM,需求添加FULLTEXT,可以在建表时添加,如果存在数据的导入,可以在导入后再添加,我感觉是你懂的,索引嘛,查询快,插删改来着慢。

因为我的数据量比较小,就不计较这些了。

移植原表的数据:

INSERT INTO enquiry_template_test
 SELECT * FROM enquiry_template;

进行查询:

SELECT *
FROM `enquiry_template_test`
WHERE MATCH(item_code) AGAINST('+0001 +0010 -0002 -0003 -0004 -0005 -0006 -0007 -0008 -0009 -0010 -0011 -0012 -0014 +0015' IN BOOLEAN MODE);

因为所有的模板项是固定的code分别从0001到0015。

当前台传递是否存在一个有0001,0010,0015三个模板项的模板的查询

虽然sql比较难看,但是至少满足需求了。



转载于:https://my.oschina.net/u/260244/blog/311549

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值