版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、MySQL全文索引與搜索,一、注意事項 二、創(chuàng)建索引 三、查詢 四、布爾全文搜索 :IN BOOLEAN MODE 修飾語 五、scws中文分詞 參考資料: ,內(nèi)容介紹,注意事項,一、為什么要用全文索引呢? 一般的數(shù)據(jù)庫搜索都是用的SQL的 like 語句,like 語句有時是不能利用索引的,每次查詢都是從第一條遍歷至最后一條,查詢效率極其低下。 全文索引在 MySQL 中是一個 FULLTEXT 類型的索引。FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 時或之后使用 ALTER TABLE 或 CREATE INDEX 在 CHAR、VARCHAR 或 TE
2、XT 列上創(chuàng)建。 二、全文停止字(禁用字) 三、全文索引中默認搜索的最短詞的長度: 修改 my.ini (Linux 下是 f ) , 在 mysqld 后面加入一行 “ft_min_word_len=1”, 然后重啟Mysql。 查看: show variables like ft_m%;,創(chuàng)建索引,創(chuàng)建全文索引: mysql CREATE TABLE articles ( - id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,- title VARCHAR(200), - body TEXT, - FULLTEXT (title,bod
3、y) - ); ALTER TABLE table_name ADD FULLTEXT ( column ); CREATE FULLTEXT INDEX index_name ON table_name (column_name); 查看索引: show index from table_name ; 或:,查詢(一),全文搜索通過 MATCH() 函數(shù)完成 SELECT * FROM articles WHERE MATCH (title,body) AGAINST (database); 注:可以傳遞不止一個字段用MATCH()來查看只需用逗號來分割字段列表。搜索可以忽略字母大小寫。對于
4、表中的每個記錄行,MATCH() 返回一個相關(guān)性值。即,在搜索字符串與記錄行在 MATCH() 列表中指定的列的文本之間的相似性尺度。 當 MATCH() 被使用在一個 WHERE 子句中時 (參看上面的例子),返回的記錄行被自動地以相關(guān)性從高到底的次序排序。相關(guān)性值是非負的浮點數(shù)字。零相關(guān)性意味著不相似。相關(guān)性的計算是基于:詞在記錄行中的數(shù)目、在行中唯一詞的數(shù)目、在集中詞的全部數(shù)目和包含一個特殊詞的文檔(記錄行)的數(shù)目。,查詢(二),前面說的是函數(shù) MATCH() 使用上的一些基本說明。記錄行以相似性遞減的順序返回。如果想看到每個記錄的相似性如何,只需要返回MATCH()方法作為結(jié)果集的一部
5、分,下面這個示例顯示如何檢索一個明確的相似性值。如果沒有 WHERE 子句也沒有 ORDER BY 子句,返回行是不排序的。 SELECT id,MATCH (title,body) AGAINST (Tutorial) FROM articles;,查詢(三),下面的示例更復(fù)雜一點。查詢返回相似性并依然以相似度遞減的次序返回記錄行。為了完成這個結(jié)果,你應(yīng)該指定 MATCH() 兩次。這個時候相似度為0的行,也就是不包含這個單詞的行就不顯示出來了。這不會引起附加的開銷,因為 MySQL 優(yōu)化器會注意到兩次同樣的 MATCH() 調(diào)用,并只調(diào)用一次全文搜索代碼。 select id,match(
6、title,body) against(Tutorial) from articles where match(title,body) against (Tutorial); 一個出現(xiàn)在許多文件中的單詞具有較低的重要性(而且甚至很多單詞的重要性為零),原因是在這個特別詞庫中其語義價值較低。反之,假如這個單詞比較少見,那么它會得到一個較高的重要性。然后單詞的重要性被組合,從而用來計算該行的相關(guān)性。 這項技術(shù)最適合同大型詞庫一起使用 (事實上, 此時它經(jīng)過仔細的調(diào)整 )。對于很小的表,單詞分布并不能充分反映它們的語義價值, 而這個模式有時可能會產(chǎn)生奇特的結(jié)果。例如, 雖然單詞 “MySQL” 出現(xiàn)
7、在文章表中的每一行,但對這個詞的搜索可能得不到任何結(jié)果:,雖然單詞 “MySQL” 出現(xiàn)在文章表中的每一行,但對這個詞的搜索可能得不到任何結(jié)果: SELECT * FROM articles WHERE MATCH (title,body) AGAINST (MySQL); 這個搜索的結(jié)果為空,原因是單詞 “MySQL” 出現(xiàn)在至少全文的50%的行中。 因此, 它被列入停止字。 如果遇到這種情況,在查詢的時候可以更改查詢的條件來進行矯正如: SELECT * FROM articles WHERE MATCH (title,body) AGAINST (MySQL in BOOLEAN mod
8、e);,全文停止字、全文限定條件,全文限定條件 1、全文搜索只適用于 MyISAM 表。 2、全文搜索可以同大多數(shù)多字節(jié)字符集一起使用。Unicode屬于例外情況; 可使用utf8 字符集 , 而非ucs2字符集。 3、諸如漢語和日語這樣的表意語言沒有自定界符。因此, FULLTEXT分析程序不能確定在這些或其它的這類語言中詞的起始和結(jié)束的位置。 4、若支持在一個單獨表中使用多字符集,則所有 FULLTEXT索引中的列 必須使用同樣的字符集和庫。 5、MATCH()列列表必須同該表中一些 FULLTEXT索引定義中的列列表完全符合,除非MATCH()在IN BOOLEAN MODE。 6、對A
9、GAINST() 的參數(shù)必須是一個常數(shù)字符串。 全文停止字 In、not、 but、 go、 as 等等,IN BOOLEAN MODE 修飾語,MySQL 也可以使用 IN BOOLEAN MODE 修飾語來執(zhí)行一個邏輯全文搜索。 SELECT * FROM articles WHERE MATCH (title,body) AGAINST (+MySQL -YourSQL IN BOOLEAN MODE); 這個查詢返回所有包含詞 MySQL 的記錄行,但是它沒有包含詞 YourSQL。 布爾全文搜索具有以下特點: 1、它們不使用 50% 域值。 2、它們不會按照相關(guān)性漸弱的順序?qū)⑿羞M行分
10、類。你可以從上述問詢結(jié)果中看到這一點:相關(guān)性最高的行是一個包含兩個“MySQL” 的行,但它被列在最后的位置,而不是開頭位置。 3、即使沒有FULLTEXT,它們?nèi)匀豢梢怨ぷ?,盡管這種方式的搜索執(zhí)行的速度非常之慢。 4、最小單詞長度全文參數(shù)和最大單詞長度全文參數(shù)均適用。 5、停止字適用。,IN BOOLEAN MODE 修飾語,邏輯全文搜索支持下面的操作符: + 一個領(lǐng)頭的加號表示,該詞必須出現(xiàn)在每個返回的記錄行中。 - 一個領(lǐng)頭的減號表示,該詞必須不出現(xiàn)在每個返回的記錄行中。 缺省的 (當既沒有加號也沒有負號被指定時)詞是隨意的,但是包含它的記錄行將被排列地更高一點。這個模仿沒有 IN BO
11、OLEAN MODE 修飾詞的 MATCH() . AGAINST() 的行為。 這兩個操作符用于改變一個詞的相似性值的基值。 操作符則增加它。參看下面的示例。 ( ) 圓括號用于對子表達式中的詞分組。 一個領(lǐng)頭的否定號的作用象一個否定操作符,引起行相似性的詞的基值為負的。它對標記一個噪聲詞很有用。一個包含這樣的詞的記錄將被排列得低一點,但是不會被完全的排除,因為這樣可以使用 - 操作符。 * 一個星號是截斷操作符。不想其它的操作符,它應(yīng)該被追加到一個詞后,不加在前面。 短語,被包圍在雙引號中,只匹配包含這個短語(字面上的,就好像被鍵入的)的記錄行。,IN BOOLEAN MODE 修飾語,這
12、里是一些示例: apple banana 找至少包含上面詞中的一個的記錄行 +apple +juice . 兩個詞均在被包含 +apple macintosh . 包含詞 “apple”,但是如果同時包含 “macintosh”,它的排列將更高一些 +apple -macintosh . 包含 “apple” 但不包含 “macintosh” +apple +(pie strudel) . 包含 “apple” 和 “pie”,或者包含的是 “apple” 和 “strudel” (以任何次序),但是 “apple pie” 排列得比 “apple strudel” 要高一點 apple* .
13、 包含 “apple”,“apples”,“applesauce” 和 “applet” some words . 可以包含 “some words of wisdom”,但不是 “some noise words”,分詞,scws的安裝請參考 注意:在安裝的時候一定注意,你的項目使用的是什么字符集,安裝對應(yīng)的scws,否則在分詞的過程中會出現(xiàn)無法分詞的現(xiàn)象。安裝后查看phpinfo會開到scws對應(yīng)的擴展(相應(yīng)的字符集也可以看到!)php對應(yīng)的api接口可以參考 根據(jù)您當前用的 PHP 版本,下載相應(yīng)已編譯好的 php_scws.dll 擴展庫。 目前支持 PHP-4.4.x 和 PHP-5
14、.2.x 系列,下載地址分別為: php-4.4.x: php-5.2.x: php-5.3.x: 將下載后的 php_scws.dll 放到 php 安裝目錄的 extensions/ 目錄中去(通常為:X:/php/extensions/或 X:/php/ext/)。 建立一個本地目錄放規(guī)則集文件和詞典文件,建議使用:C:/program files/scws/etc 4. 從 scws 主頁上下載詞典文件,解壓后將 *.xdb 放到上述目錄中 詞典系列: ,分詞,從 scws 主頁上下載規(guī)則集文件,解壓后將 *.ini 放到第 3 步建立的目錄 規(guī)則集文件壓縮包: 解壓后有三個文件分別為 rules.ini rules.utf8.ini rules_cht.utf8.ini 將三件文件拷到第 3 步所述的目錄中 修改 php.ini 在 php.ini 的末尾加入以下幾行: scws
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 舞蹈藝術(shù)之魅力
- 人事部在企業(yè)戰(zhàn)略中的角色計劃
- 感恩父母與愛同行的演講稿5篇
- 2024年員工三級安全培訓(xùn)考試題(滿分必刷)
- 2023-2024年項目安全培訓(xùn)考試題帶答案(奪分金卷)
- 社團運營與成員發(fā)展
- 《本科心律失常》課件
- 教授能量轉(zhuǎn)換守恒
- 北師大版八年級下冊數(shù)學(xué)期末測試題
- 印刷設(shè)備智能化升級-第1篇-洞察分析
- 2024-2025學(xué)年七年級上學(xué)期歷史觀點及論述題總結(jié)(統(tǒng)編版)
- 2024年市特殊教育學(xué)校工作總結(jié)范文(2篇)
- 【MOOC】創(chuàng)新思維與創(chuàng)業(yè)實驗-東南大學(xué) 中國大學(xué)慕課MOOC答案
- 青島大學(xué)《英語綜合》2023-2024學(xué)年第一學(xué)期期末試卷
- 課題1 金屬材料 教學(xué)設(shè)計 九年級化學(xué)下冊人教版2024
- EPC工程總承包實施方案
- 新人模特經(jīng)紀合同范例
- 電動車自燃應(yīng)急預(yù)案
- 語法辨析-中考語文真題題源解密(遼寧版)(帶答案)
- 山西省晉中市2023-2024學(xué)年高一上學(xué)期期末考試 化學(xué) 含解析
- 2024-2030年中國電子駐車制動器(EPB)行業(yè)發(fā)展現(xiàn)狀及前景趨勢研究報告
評論
0/150
提交評論