程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 基於mysql全文索引的深刻懂得

基於mysql全文索引的深刻懂得

編輯:MySQL綜合教程

基於mysql全文索引的深刻懂得。本站提示廣大學習愛好者:(基於mysql全文索引的深刻懂得)文章只能為提供參考,不一定能成為您想要的結果。以下是基於mysql全文索引的深刻懂得正文


媒介:本文簡略講述全文索引的運用實例,MYSQL演示版本5.5.24。
Q:全文索引實用於甚麼場所?
A:全文索引是今朝完成年夜數據搜刮的症結技巧。
至於更具體的引見請自行百度,本文不再論述。
--------------------------------------------------------------------------------
1、若何設置?



如圖點擊開頭處的{全文搜刮}便可設置全文索引,分歧MYSQL版本名字能夠分歧。

2、設置前提
1.表的存儲引擎是MyISAM,默許存儲引擎InnoDB不支撐全文索引(新版本MYSQL5.6的InnoDB支撐全文索引)
2.字段類型:char、varchar和text
 
3、設置裝備擺設
my.ini設置裝備擺設文件中添加
# MySQL全文索引查詢症結詞最小長度限制
[mysqld]
ft_min_word_len = 1
保留後重啟MYSQL,履行SQL語句

SHOW VARIABLES

檢查ft_min_word_len能否設置勝利,假如沒設置勝利請確保
1.確認my.ini准確設置裝備擺設,留意不要弄錯my.ini的地位
2.確認mysql曾經重啟,其實不可重啟電腦
其他相干設置裝備擺設請自行百度。
注:從新設置設置裝備擺設後,曾經設置的索引須要從新設置生成索引
 
4、SQL語法
起首生成temp表

CREATE TABLE IF NOT EXISTS `temp` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `char` char(50) NOT NULL,
 `varchar` varchar(50) NOT NULL,
 `text` text NOT NULL,
 PRIMARY KEY (`id`),
 FULLTEXT KEY `char` (`char`),
 FULLTEXT KEY `varchar` (`varchar`),
 FULLTEXT KEY `text` (`text`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
INSERT INTO `temp` (`id`, `char`, `varchar`, `text`) VALUES
(1, 'a bc 我 曉得 1 23', 'a bc 我 曉得 1 23', 'a bc 我 曉得 1 23');

搜刮`char`字段 'a' 值

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('a')

然則你會發明查詢無成果?!
這時候你或許會想:哎呀怎樣回事,我明明依照步調來做的啊,是否是那邊漏了或許錯了?
你不要焦急,做法式是如許的,失足老是有的,靜下心來,焦急是不克不及處理成績的。
 
假如一個症結詞在50%的數據湧現,那末這個詞會被當作有效詞。
假如你想去除50%的如今請應用IN BOOLEAN MODE搜刮

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('a' IN BOOLEAN MODE)

如許便可以查詢出成果了,然則我們不推舉應用。
全文索引的搜刮形式的引見自行百度。
 
我們先參加幾條無用數據已消除50%限制

INSERT INTO `temp` (
`id` ,
`char` ,
`varchar` ,
`text`
)
VALUES (
NULL , '7', '7', '7'
), (
NULL , '7', '7', '7'
), (
NULL , 'a,bc,我,曉得,1,23', 'a,bc,我,曉得,1,23', 'a,bc,我,曉得,1,23'
), (
NULL , 'x', 'x', 'x'
);

這時候你履行以下SQL語句都可以查詢到數據

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('a');
SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('bc');
SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('我');
SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('曉得');
SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('1');
SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('23');

以下SQL搜刮不到數據

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('b');
SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('c');
SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('知');
SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('道');
SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('2');
SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('3');

假如搜刮多個詞,請用空格或許逗號離隔

SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('a x');
SELECT * FROM `temp` WHERE MATCH(`char`) AGAINST ('a,x');

下面的SQL都可以查詢到三條數據
 
5、分詞
看到這裡你應當發明我們字段裡的值也是分詞,不克不及直接拔出原始數據。
全文索引運用流程:
1.吸收數據-數據分詞-入庫
2.吸收數據-數據分詞-查詢
如今有個主要的成績:怎樣對數據分詞?
數據分詞普通我們會應用一些成熟收費的分詞體系,固然假如你有才能也能夠本身做分詞體系,這裡我們推舉應用SCWS分詞插件。
起首下載
1.php_scws.dll  留意對應版本
2.XDB辭書文件
3.規矩集文件
下載地址
 
裝置scws
1.先建一個文件夾,地位不限,然則最好不要中文途徑。
2.解壓{規矩集文件},把xdb、三個INI文件全體扔到 D:\scws
3.把php_scws.dll復制到你的PHP目次下的EXT文件夾外面
4.在 php.ini 的末尾參加以下幾行:
[scws]
;
; 留意請檢討 php.ini 中的 extension_dir 的設定值能否准確, 不然請將 extension_dir 設為空,
; 再把 php_scws.dll 指定為相對途徑。
;
extension = php_scws.dll
scws.default.charset = utf8
scws.default.fpath = "D:\scws"
5.重啟你的辦事器
測試

$str="測試中文分詞";
$so = scws_new();
$so->send_text($str);
$temp=$so->get_result();
$so->close();
var_dump($temp);

假如裝置未勝利,請參照官方解釋文檔
--------------------------------------------------------------------------------
如許我們便可以應用全文索引技巧了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved