Mysql全文检索之onesql

本文介绍了如何使用Mysql实现全文检索功能,特别是针对中文的分词处理。通过安装和配置oneSql插件来增强Mysql的全文搜索能力,并提供详细的步骤和测试验证。

本文主要介绍数据库-Mysql的全文检索

什么是全文检索

我理解就是根据关键字查出所有相关的信息;比如一个电商网站,输入一件商品名称,会搜出来相应的商品信息;或许一些站内搜索,会全网站搜索相关资源。
当然,这里假定为一个web管理系统,Mysql数据库,用户输入商品名称,要从数据库中检索出对应的商品

全文检索手段

1.Apache 的Lucene,还有基于它的solr 下载
2.sphinx
3.Mysql自带的

4.Mysql插件oneSql

这里主要介绍下第4种Mysql插件oneSql,因为它实现了中文分词,而正是需要它!

oneSql

亲测可用(非生产,稳定性及性能不在讨论范围),不过有些遗憾的是,它是收费的。所以下载的版本如果有问题及需要支持就要掏钱了,也处顺便给大神打个广告平民软件

测试环境

1.centos7,运行于虚拟机Vmware12
2.Mysql5.7点击打开链接
3.oneSql插件点击打开链接

安装centos










这里面可以选择是否安装界面,默认不安装


选择开启网络


设置密码


安装mysql

https://dev.mysql.com/doc/refman/5.7/en/linux-installation-rpm.html

把下载的文件用FTP传到centos虚拟机


解压tar包


之后进行安装:sudo yum install mysql-community-{server,client,common,libs}-*

这个时候可能会报冲突


主要是这个,

尝试把它去掉


再重试,


安装完成

查看安装的rpm包


启动mysql:sudo service mysqld start


查看初始密码


修改密码


ALTER USER 'root'@'localhost' IDENTIFIED BY'Tangwei!123';


如果要远程连接,关闭一下防火墙

CentOS7.0默认使用的是firewall作为防火墙

1、关闭firewall
systemctl stop firewalld.service #
停止firewall
systemctl disable firewalld.service #
禁止firewall开机启动

 

允许Mysql远程连接

# mysql -u root -proot

mysql>GRANT ALL PRIVILEGES ON*.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;

 

操作完后切记执行以下命令刷新权限

FLUSHPRIVILEGES


连接成功!


安装onesql插件

参考:http://blog.youkuaiyun.com/rookie_ceo/article/details/48104083

http://man.linuxde.net/rpm

上传插件



安装一下



查看一下安装位置


停止mysql先


然后用onesql启动


查看一下分词插件


修改一下mysql参数

参考:http://www.onexsoft.com/zh/mysql-fulltext-search-with-friso.html

http://www.onexsoft.com/zh/onesql-friso-fulltext-plugin.html

https://www.cnblogs.com/devcjq/articles/6409470.html

设置全局变量方法1(不推荐): 修改参数文件然后重启mysqld

# vi /etc/my.cnf

[mysqld]

wait_timeout=10

# service mysqld restart

不过这个方法太生硬了线上服务重启无论如何都应该尽可能避免.


然后重启mysql


然后测试分词

show variables like'%min_word_len';

show variables like'%min_token_size';

show variables like 'friso%';

SELECT * FROM articles

WHERE MATCH(title,body) AGAINST('数据库')

DROP TABLE t_fulltext;

SELECT * FROM t_fulltext;

create table t_fulltext (

      id int not null primary key,

     doc varchar(100)) charset utf8;

create fulltext indexidx_t_fulltext

       on t_fulltext(doc)

       with parser friso;

insert into t_fulltext values (1,'中文Search');

select * from t_fulltext

     where match(doc) against ('中文');


成功了

停止onesql




### 处理 JSON 数据的一般方法 OneSQL 是一种支持多种数据库功能的查询工具,其处理 JSON 数据的方式类似于 MySQL 和其他现代关系型数据库系统。以下是关于如何在 OneSQL 中处理 JSON 数据的一些关键点: #### 1. **JSON 的存储** 在 OneSQL 中,可以通过创建表并将某一列指定为 `JSON` 类型来存储 JSON 数据[^1]。例如: ```sql CREATE TABLE your_table ( id INT PRIMARY KEY, json_column JSON ); ``` 此语法允许将复杂的 JSON 对象直接存储到数据库中。 --- #### 2. **提取 JSON 数据** 为了从 JSON 列中提取特定的数据项,可以使用 `JSON_EXTRACT()` 函数。该函数接受两个参数:第一个是包含 JSON 数据的列名,第二个是要提取的路径表达式。例如: ```sql SELECT JSON_EXTRACT(json_column, '$.key_name') AS extracted_key FROM your_table; ``` 这会返回 JSON 对象中对应于 `$key_name` 路径的值。 对于更简洁的写法,还可以使用箭头运算符 (`->`) 来替代 `JSON_EXTRACT()` 函数[^2]: ```sql SELECT json_column -> '$.key_name' AS extracted_key FROM your_table; ``` 如果希望去掉结果中的双引号,则可进一步使用 `JSON_UNQUOTE()` 函数: ```sql SELECT JSON_UNQUOTE(JSON_EXTRACT(json_column, '$.key_name')) AS unquoted_value FROM your_table; ``` 或者简化为: ```sql SELECT json_column ->> '$.key_name' AS unquoted_value FROM your_table; ``` --- #### 3. **基于 JSON 进行去重** 当需要对整个 JSON 对象进行去重时,可以结合 `GROUP BY` 子句实现。例如: ```sql SELECT id, JSON_EXTRACT(json_column, '$.specific_key') AS specific_value FROM your_table GROUP BY json_column; ``` 这里的关键在于通过 `GROUP BY` 将重复的 JSON 字段分组。 需要注意的是,在处理大型 JSON 字段或大规模数据集时,性能可能会受到影响。因此建议提前分析 JSON 结构并优化查询逻辑。 --- #### 4. **判断 JSON 是否包含某些值** 要检查某个 JSON 列是否包含特定子集,可以利用 `JSON_CONTAINS()` 函数。例如: ```sql SELECT * FROM your_table WHERE JSON_CONTAINS(json_column, '"value"', '$.array_path'); ``` 上述语句用于验证 `json_column` 中是否存在位于 `$array_path` 下的 `"value"`。 --- #### 5. **构建新的 JSON 数据** 若需动态生成 JSON 数据,可以借助 `JSON_OBJECT()` 或 `JSON_ARRAY()` 函数完成。例如: - 构建一个简单的 JSON 对象: ```sql SELECT JSON_OBJECT('name', 'Alice', 'age', 30) AS new_json_object; ``` - 创建一个包含多个元素的 JSON 数组: ```sql SELECT JSON_ARRAY('First Element', 1, NULL, 2, NULL ON NULL) AS new_json_array; ``` 后者还展示了如何显式地将 SQL 中的 `NULL` 映射为 JSON 的空值(`null`)[^3]。 --- #### 6. **解析复杂嵌套结构** 针对深层嵌套的 JSON 数据,可通过多级路径访问目标节点。比如: ```sql SELECT JSON_EXTRACT(json_column, '$.outer.inner.key') AS nested_value FROM your_table; ``` 这种技术适用于读取多层次的 JSON 属性。 --- ### 总结 以上介绍了 OneSQL 中常见的 JSON 操作方式,涵盖了基本的存储、检索以及高级查询技巧等内容。这些功能使得开发者能够更加灵活高效地管理半结构化数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值