mysql全文检索简单应用

需求是这样的:项目中有一张模板表,模板项中有个大字段,存放这个模板具体的模板项信息以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比较难看,但是至少满足需求了。

时间: 2024-10-06 10:03:59

mysql全文检索简单应用的相关文章

MySQL全文检索

一.概述 MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度. 二.语法 MATCH (col1,col2,...) AGAINST (expr [search_modifier]) search_modifier: { IN BOOLEAN MODE | WITH QUERY EXPANSION } 例如: SELECT * FROM tab_name WHERE MATCH ('列名1,列名2...列名n') AGAINST('词1 词2 词

RDS MySQL 全文检索相关问题的处理

RDS MySQL 全文检索相关问题 1. RDS MySQL 对全文检索的支持 2. RDS MySQL 全文检索相关参数 3. RDS MySQL 全文检索中文支持 3.1 MyISAM 引擎表 3.2 InnoDB 引擎表 4. like '%xxx%' 和全文检索的比较 4.1 like '%xxx%' 4.2 全文检索 5. ft_query_expansion_limit 参数作用 1. RDS MySQL 对全文检索的支持 RDS MySQL 5.5 仅 MyISAM 引擎表支持全

Ubuntu 安装mysql和简单操作

ubuntu上安装mysql非常简单只需要几条命令就可以完成. 1. sudo apt-get install mysql-server 2. apt-get isntall mysql-client 3.  sudo apt-get install libmysqlclient-dev 安装过程中会提示设置密码什么的,注意设置了不要忘了,安装完成之后可以使用如下命令来检查是否安装成功: sudo netstat -tap | grep mysql 通过上述命令检查之后,如果看到有mysql 的

mysql 存储过程简单学习

转载自:http://blog.chinaunix.net/uid-23302288-id-3785111.html ■存储过程Stored Procedure 存储过程就是保存一系列SQL命令的集合,将这些sql命令有组织的形成一个小程序,这样会实现很复杂的处理 SQL基本是一个命令一个命令执行,虽然可以通过连接.子查询等实现些高级的处理,但局限性是显而易见的 ■存储过程的优势 1.提高执行性能(存储过程事先完成了解析.编译的处理,执行时能减轻数据库负担) 2.可减轻网络负担(比起多次传递SQ

php+mysql实现简单登录注册修改密码网页

本文为php+mysql实现简单登录注册修改密码网页,原文网址:http://www.jb51.net/article/98673.htm,感谢写此代码的人,亲测有效.感谢感谢 对于php和mysql的连接在许多blog上都有说明,为了将mysql中的查询,修改,插入等操作掌握,本文介绍了一下如何采用mysql做一个登录注册修改密码的网页. 其中,如下 1.登录-即为对数据库中的内容给予查询,并验证html中的信息与数据库是否匹配:2.注册-即为对数据库中的内容进行插入,注册帐号与密码:3.修改

lighttpd mysql php简单教程

lighttpd mysql php简单教程 lighttpd+php5+mysql+Debian etch lighttpd是速度最快的静态web server,mysql最通用的的database server,不过考虑换成sqlite 先来看看lighttpd吧,装了debian 后一切都很简单了. 先通过ssh登入到debian 1.#apt-get install lighttpd 2.#apt-get install php5-cgi 配置php #vi /etc/php5/cgi/

Ubuntu下安装MySQL及简单操作

Ubuntu上安装MySQL非常简单只需要几条命令就可以完成. 1. sudo apt-get install mysql-server 2. apt-get isntall mysql-client 3.  sudo apt-get install libmysqlclient-dev 安装过程中会提示设置密码什么的,注意设置了不要忘了,安装完成之后可以使用如下命令来检查是否安装成功: sudo netstat -tap | grep mysql 通过上述命令检查之后,如果看到有mysql 的

Mysql的简单使用(三)

接上文Mysql的简单使用(二) mysql中结构相同的两个表进行合并:(注意需要两个表的结构是一样的) 有如下结构的两个表father和person. 合并的步骤为: 1.把person表和father表两个表进行联合输出到临时表tmp中. 命令为:>create temporary table tmp select * from person union select *from father; 2.创建结果表,并创建主键. 命令为:>create table resu(name varc

mysql模块简单实用操作-----nodejs

1 //mysql模块简单实用操作 2 3 var mysql = require('mysql'); 4 5 mc = {}; 6 7 8 var dbconfig = { 9 host : 'xxxxxxxxxx', 10 user : 'xxx', 11 password : 'xxx', 12 database : 'xxxxx' 13 }; 14 15 16 17 mc.sqlExc = function (sql, next) { 18 var db = mysql.createCo