你有沒有想過如何使用搜索功能在所有整站中實(shí)現(xiàn)!互聯(lián)網(wǎng)博客和網(wǎng)站,大多數(shù)都采用MySQL數(shù)據(jù)庫。MySQL提供了一個(gè)美妙的方式實(shí)施一個(gè)小的搜索引擎,在您的網(wǎng)站(全文檢索)。所有您需要做的是擁有的MySQL 4.x及以上。MySQL提供全文檢索功能,我們可以用它來 ??實(shí)現(xiàn)搜索功能。
專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)北湖免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了成百上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
首先,讓我們?yōu)槲覀兊睦又性O(shè)置一個(gè)示例表。我們將創(chuàng)建一個(gè)名為第一個(gè)表。
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title,body)
);
在此表中還可以添加一些示例數(shù)據(jù)。執(zhí)行后,插入查詢。
INSERT INTO articles (title,body) VALUES
('MySQL Tutorial','DBMS stands for DataBase ...'),
('How To Use MySQL Well','After you went through a ...'),
('Optimizing MySQL','In this tutorial we will show ...'),
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
('MySQL vs. YourSQL','In the following database comparison ...'),
('MySQL Security','When configured properly, MySQL ...');
一旦樣本數(shù)據(jù)是準(zhǔn)備好,我們可以開始我們的全文檢索功能。
自然語言全文搜索
嘗試我們的示例表上執(zhí)行下面的SELECT查詢。
SELECT * FROM articles
WHERE MATCH (title,body) AGAINST ('database');
你就能看到結(jié)果如下:
在下面的數(shù)據(jù)庫比較5 MySQL與YourSQL的...
MySQL教程DBMS 1代表數(shù)據(jù)庫...
我們在上面的SQL查詢(標(biāo)題,正文)反對(duì)(“數(shù)據(jù)庫”)的比賽,選擇所有的記錄,列標(biāo)題和正文進(jìn)行全文搜索。
您可以修改該查詢,并創(chuàng)建您自己的版本,以自己的數(shù)據(jù)庫中執(zhí)行全文搜索。
布爾全文搜索
它可能發(fā)生,你要指定某些關(guān)鍵字在您的搜索條件。此外,您可能要忽略某些關(guān)鍵字。布爾全文搜索可以用來執(zhí)行這些要求的全文檢索。
檢查下面的SELECT查詢。
SELECT * FROM articles WHERE MATCH (title,body)
AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
如果您發(fā)現(xiàn)上述選擇查詢,我們增加了布爾MODE反對(duì)()。這個(gè)查詢將獲取MySQL的關(guān)鍵字,但不YourSQL關(guān)鍵字的所有記錄。請(qǐng)注意+和-我們以前指定的關(guān)鍵字!
在執(zhí)行此功能,MySQL使用什么有時(shí)也被稱為布爾邏輯作為暗示,其中:+代表與-代表不是[無操作員]暗示或
以下是幾個(gè)例子布爾搜索條件。
“蘋果香蕉
查找行至少包含兩個(gè)詞之一。
“+蘋果+果汁”
尋找包含兩個(gè)單詞的行。
“+蘋果Macintosh
查找行包含“蘋果”,但排名的行,如果它們也包含“麥金塔”。
“+蘋果Macintosh的”
查找行包含“蘋果”這個(gè)詞,而不是“麥金塔”。
'+蘋果Macintosh的“
查找包含單詞“蘋果”的行,但如果該行也包含單詞“麥金塔”,速度比如果行不低。這是“軟”比“+蘋果Macintosh電腦”,為“麥金塔”的存在,導(dǎo)致該行不能在所有返回的搜索。
'+蘋果+(營業(yè)額餡餅)“
行包含“蘋果”和“營業(yè)額”,或“蘋果”和“餡餅”(任何順序)的話,但排名“蘋果的營業(yè)額”比“蘋果餡餅“。
限制
支持全文檢索的MyISAM表只。MySQL 4.1中,使用多個(gè)字符設(shè)置一個(gè)單一的表內(nèi)的支持。然而,在一個(gè)FULLTEXT索引的所有列,必須使用相同的字符集和校對(duì)規(guī)則。MATCH()列列表必須匹配完全在一些列清單表的FULLTEXT索引定義,除非這場比賽()是在布爾模式。布爾模式搜索,可以做非索引列,雖然他們很可能是緩慢的。
MySQL支持全文索引和搜索功能。在MySQL中可以在CHAR、VARCHAR或TEXT列使用FULLTETXT來創(chuàng)建全文索引。
FULLTEXT索引主要用MATCH()...AGAINST語法來實(shí)現(xiàn)搜索:
MySQL的全文搜索存在以下局限:
通常來說MySQL自帶的全文搜索使用起來局限性比較大,性能和功能都不太成熟,主要適用于小項(xiàng)目,大項(xiàng)目還是建議使用elasticsearch來做全文搜索。
ElasticSearch是一個(gè)分布式的開源搜索和分析引擎,適用于所有類型的數(shù)據(jù),包括文本、數(shù)字、地理空間、結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù),以下簡稱ES。
Elasticsearch 在 Apache Lucene 的基礎(chǔ)上開發(fā)而成,Elasticsearch 以其簡單的 REST 風(fēng)格 API、分布式特性、速度和可擴(kuò)展性而聞名,是 Elastic Stack 的核心組件。Elastic Stack 是適用于數(shù)據(jù)采集、充實(shí)、存儲(chǔ)、分析和可視化的一組開源工具。
Elasticsearch 的實(shí)現(xiàn)原理主要分為以下幾個(gè)步驟,首先用戶將數(shù)據(jù)提交到Elasticsearch 數(shù)據(jù)中心,再通過分詞控制器去將對(duì)應(yīng)的數(shù)據(jù)分詞,將其權(quán)重和分詞結(jié)果一并存入數(shù)據(jù),當(dāng)用戶搜索數(shù)據(jù)時(shí)候,再根據(jù)權(quán)重將結(jié)果排名,打分,再將返回結(jié)果呈現(xiàn)給用戶。
由于ES是基于RESTfull Web接口的,因此我們直接按照慣例傳遞JSON參數(shù)調(diào)用接口即可實(shí)現(xiàn)增刪改查,并且不需要我們做額外的管理操作就可以直接索引文檔,ES已經(jīng)內(nèi)置了所有的缺省操作,可以自動(dòng)幫我們定義類型。
再次執(zhí)行PUT,會(huì)對(duì)庫中已有的id為1的數(shù)據(jù)進(jìn)行覆蓋,每修改一次_version字段的版本號(hào)就會(huì)加1。
默認(rèn)搜索會(huì)返回前10個(gè)結(jié)果:
返回的幾個(gè)關(guān)鍵詞:
查詢字符串搜索,可以像傳遞URL參數(shù)一樣傳遞查詢語句。
精確查詢:
全文搜索:
以上兩種方法都需要考慮數(shù)據(jù)更改后如何與ES進(jìn)行同步。
方法/步驟
我們首先打開mysql的客戶端管理工具 Navicat
在客戶端管理工具連接上數(shù)據(jù)庫后,點(diǎn)擊選中要修改的庫。然后點(diǎn)擊‘Tables’來打開表視圖。
打開后在右邊找到要修改的表,右鍵點(diǎn)擊這個(gè)表然后點(diǎn)擊‘Design Table’(設(shè)計(jì)表)
打開后,在這里點(diǎn)擊上方的‘Indexes’,也就是索引。
現(xiàn)在該表的索引為空,我們點(diǎn)擊下方的+號(hào)圖標(biāo)來添加一個(gè)。
在這里先輸入索引名稱,然后點(diǎn)擊這個(gè)按鈕來選擇列,看是對(duì)哪一列進(jìn)行索引。
點(diǎn)擊后就會(huì)彈出窗口,在這里會(huì)列出這個(gè)表的所有列,我們在這里選擇'name’,即是對(duì)這個(gè)name列進(jìn)行索引的。
最后選擇索引的類型,我們在這時(shí)選擇全文索引,一般對(duì)字符串的索引都是選擇這個(gè)的。
設(shè)置好后,點(diǎn)擊保存按鈕,或快捷鍵ctrl+s保存就行了。
在mysql中,索引是一種特殊的數(shù)據(jù)庫結(jié)構(gòu),由數(shù)據(jù)表中的一列或多列組合而成,可以用來快速查詢數(shù)據(jù)表中有某一特定值的記錄。
通過索引,查詢數(shù)據(jù)時(shí)不用讀完記錄的所有信息,而只是查詢索引列即可。
通過索引,查詢數(shù)據(jù)時(shí)不用讀完記錄的所有信息,而只是查詢索引列。否則,數(shù)據(jù)庫系統(tǒng)將讀取每條記錄的所有信息進(jìn)行匹配。
可以把索引比作新華字典的音序表。例如,要查“庫”字,如果不使用音序,就需要從字典的 400 頁中逐頁來找。但是,如果提取拼音出來,構(gòu)成音序表,就只需要從 10 多頁的音序表中直接查找。這樣就可以大大節(jié)省時(shí)間。
因此,使用索引可以很大程度上提高數(shù)據(jù)庫的查詢速度,還有效的提高了數(shù)據(jù)庫系統(tǒng)的性能。
索引的優(yōu)缺點(diǎn)
索引有其明顯的優(yōu)勢,也有其不可避免的缺點(diǎn)。
優(yōu)點(diǎn)
索引的優(yōu)點(diǎn)如下:
1、通過創(chuàng)建唯一索引可以保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性。
2、可以給所有的 MySQL 列類型設(shè)置索引。
3、可以大大加快數(shù)據(jù)的查詢速度,這是使用索引最主要的原因。
4、在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面可以加速表與表之間的連接。
5、在使用分組和排序子句進(jìn)行數(shù)據(jù)查詢時(shí)也可以顯著減少查詢中分組和排序的時(shí)間
缺點(diǎn)
增加索引也有許多不利的方面,主要如下:
1、創(chuàng)建和維護(hù)索引組要耗費(fèi)時(shí)間,并且隨著數(shù)據(jù)量的增加所耗費(fèi)的時(shí)間也會(huì)增加。
2、索引需要占磁盤空間,除了數(shù)據(jù)表占數(shù)據(jù)空間以外,每一個(gè)索引還要占一定的物理空間。如果有大量的索引,索引文件可能比數(shù)據(jù)文件更快達(dá)到最大文件尺寸。
3、當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時(shí)候,索引也要?jiǎng)討B(tài)維護(hù),這樣就降低了數(shù)據(jù)的維護(hù)速度。
使用索引時(shí),需要綜合考慮索引的優(yōu)點(diǎn)和缺點(diǎn)。