MySql模糊查詢json關(guān)鍵字檢索方案示例
前言
?最近在項目中遇到這樣一個需求:需要在數(shù)據(jù)表中檢索包含指定內(nèi)容的結(jié)果集,該字段的數(shù)據(jù)類型為text,存儲的內(nèi)容是json格式,具體表結(jié)構(gòu)如下:
CREATE TABLE `product` ( `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '產(chǎn)品名稱' COLLATE 'utf8mb4_general_ci', `price` DECIMAL(10,2) UNSIGNED NOT NULL DEFAULT '0.00' COMMENT '產(chǎn)品價格', `suit` TEXT NOT NULL COMMENT '適用門店 json格式保存門店id' COLLATE 'utf8mb4_general_ci', `status` TINYINT(3) NOT NULL DEFAULT '0' COMMENT '狀態(tài) 1-正常 0-刪除 2-下架', `create_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '發(fā)布時間', `update_date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時間', PRIMARY KEY (`id`) USING BTREE ) COMMENT='產(chǎn)品表' COLLATE='utf8mb4_general_ci' ENGINE=InnoDB AUTO_INCREMENT=1 ;
表數(shù)據(jù)如下:
?
現(xiàn)需求:查找 suit->hotel 中包含10001的數(shù)據(jù)。
通過谷歌百度查找,大致找到以下幾種方案:
方案一:
select * from product where suit like '%"10001"%'; #like方式不能使用索引,性能不佳,且準(zhǔn)確性不足
方案二:
select * from product where suit LOCATE('"10001"', 'suit') > 0; # LOCATE方式和like存在相同問題
方案三:
select * from product where suit != '' and json_contains('suit'->'$.hotel', '"10001"'); #以MySQL內(nèi)置json函數(shù)查找,需要MySQL5.7以上版本才能支持,準(zhǔn)確性較高,不能使用全文索引
方案四(最終采用方案):
select * from product where MATCH(suit) AGAINST('+"10001"' IN BOOLEAN MODE); #可使用全文索引,MySQL關(guān)鍵字默認(rèn)限制最少4個字符,可在mysql.ini中修改 ft_min_word_len=2,重啟后生效
MATCH() AGAINST()?更多使用方法可查看MySQL參考手冊:
https://dev.mysql.com/doc/refman/5.6/ja/fulltext-boolean.html
總結(jié)
到此這篇關(guān)于MySql模糊查詢json關(guān)鍵字檢索方案示例的文章就介紹到這了,更多相關(guān)MySql json關(guān)鍵字檢索內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Windows下mysql community server 8.0.16安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了Windows下mysql community server 8.0.16安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-06-06mysql實現(xiàn)將字符串轉(zhuǎn)化成int類型
這篇文章主要介紹了mysql實現(xiàn)將字符串轉(zhuǎn)化成int類型方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08MySql 8.0.16版本安裝提示已經(jīng)不使用“UTF8B3”而是使用“UTF8B4”問題
這篇文章主要介紹了MySql 8.0.16版本安裝提示已經(jīng)不使用“UTF8B3”而是使用“UTF8B4”問題 ,需要的朋友可以參考下2019-07-07MySql采用GROUP_CONCAT合并多條數(shù)據(jù)顯示的方法
這篇文章主要介紹了MySql采用GROUP_CONCAT合并多條數(shù)據(jù)顯示的方法,是MySQL數(shù)據(jù)庫程序設(shè)計中常見的實用技巧,需要的朋友可以參考下2014-10-10mysql-5.7.21-winx64免安裝版安裝--Windows 教程詳解
這篇文章主要介紹了mysql-5.7.21-winx64免安裝版安裝--Windows 教程詳解,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-09-09mysql中如何將時間戳轉(zhuǎn)換為年月日格式進(jìn)行查詢
這篇文章主要介紹了mysql中如何將時間戳轉(zhuǎn)換為年月日格式進(jìn)行查詢問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07