最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

適宜做簡(jiǎn)單搜索的MySQL數(shù)據(jù)庫(kù)全文索引_MySQL

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 17:25:42
文檔

適宜做簡(jiǎn)單搜索的MySQL數(shù)據(jù)庫(kù)全文索引_MySQL

適宜做簡(jiǎn)單搜索的MySQL數(shù)據(jù)庫(kù)全文索引_MySQL:全文索引在 MySQL 中是一個(gè) FULLTEXT 類型索引。FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 時(shí)或之后使用 ALTER TABLE 或 CREATE INDEX 在 CHAR、VARCHAR 或 TEXT 列上創(chuàng)建。對(duì)于大的數(shù)據(jù)庫(kù),將數(shù)據(jù)裝載到一個(gè)沒(méi)有 FULLTEXT 索引的表
推薦度:
導(dǎo)讀適宜做簡(jiǎn)單搜索的MySQL數(shù)據(jù)庫(kù)全文索引_MySQL:全文索引在 MySQL 中是一個(gè) FULLTEXT 類型索引。FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 時(shí)或之后使用 ALTER TABLE 或 CREATE INDEX 在 CHAR、VARCHAR 或 TEXT 列上創(chuàng)建。對(duì)于大的數(shù)據(jù)庫(kù),將數(shù)據(jù)裝載到一個(gè)沒(méi)有 FULLTEXT 索引的表

全文索引在 MySQL 中是一個(gè) FULLTEXT 類型索引。FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 時(shí)或之后使用 ALTER TABLE 或 CREATE INDEX 在 CHAR、VARCHAR 或 TEXT 列上創(chuàng)建。對(duì)于大的數(shù)據(jù)庫(kù),將數(shù)據(jù)裝載到一個(gè)沒(méi)有 FULLTEXT 索引的表中,然后再使用 ALTER TABLE (或 CREATE INDEX) 創(chuàng)建索引,這將是非??斓?。將數(shù)據(jù)裝載到一個(gè)已經(jīng)有 FULLTEXT 索引的表中,將是非常慢的。

全文搜索通過(guò) MATCH() 函數(shù)完成:

mysql> CREATE TABLE articles (

-> id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,

-> title VARCHAR(200),

-> body TEXT,

-> FULLTEXT (title,body)

-> );

Query OK, 0 rows affected (0.00 sec)


mysql> INSERT INTO articles VALUES

-> (NULL,'MySQL Tutorial', 'DBMS stands for DataBase ...'),

-> (NULL,'How To Use MySQL Efficiently', 'After you went through a ...'),

-> (NULL,'Optimising MySQL','In this tutorial we will show ...'),

-> (NULL,'1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),

-> (NULL,'MySQL vs. YourSQL', 'In the following database comparison ...'),

-> (NULL,'MySQL Security', 'When configured properly, MySQL ...');

Query OK, 6 rows affected (0.00 sec)

Records: 6 Duplicates: 0 Warnings: 0


mysql> SELECT * FROM articles

-> WHERE MATCH (title,body) AGAINST ('database');

+----+-------------------+------------------------------------------+

| id | title | body |

+----+-------------------+------------------------------------------+

| 5 | MySQL vs. YourSQL | In the following database comparison ... |

| 1 | MySQL Tutorial | DBMS stands for DataBase ... |

+----+-------------------+------------------------------------------+

2 rows in set (0.00 sec)

函數(shù) MATCH() 對(duì)照一個(gè)文本集(包含在一個(gè) FULLTEXT 索引中的一個(gè)或多個(gè)列的列集)執(zhí)行一個(gè)自然語(yǔ)言搜索一個(gè)字符串。搜索字符串做為 AGAINST() 的參數(shù)被給定。搜索以忽略字母大小寫的方式執(zhí)行。對(duì)于表中的每個(gè)記錄行,MATCH() 返回一個(gè)相關(guān)性值。即,在搜索字符串與記錄行在 MATCH() 列表中指定的列的文本之間的相似性尺度。


當(dāng) MATCH() 被使用在一個(gè) WHERE 子句中時(shí) (參看上面的例子),返回的記錄行被自動(dòng)地以相關(guān)性從高到底的次序排序。相關(guān)性值是非負(fù)的浮點(diǎn)數(shù)字。零相關(guān)性意味著不相似。相關(guān)性的計(jì)算是基于:詞在記錄行中的數(shù)目、在行中唯一詞的數(shù)目、在集中詞的全部數(shù)目和包含一個(gè)特殊詞的文檔(記錄行)的數(shù)目。


它也可以執(zhí)行一個(gè)邏輯模式的搜索。這在下面的章節(jié)中被描述。


前面的例子是函數(shù) MATCH() 使用上的一些基本說(shuō)明。記錄行以相似性遞減的順序返回。 下一個(gè)示例顯示如何檢索一個(gè)明確的相似性值。如果即沒(méi)有 WHERE 也沒(méi)有 ORDER BY 子句,返回行是不排序的。


mysql> SELECT id,MATCH (title,body) AGAINST ('Tutorial') FROM articles;

+----+-----------------------------------------+

| id | MATCH (title,body) AGAINST ('Tutorial') |

+----+-----------------------------------------+

| 1 | 0.64840710366884 |

| 2 | 0 |

| 3 | 0.66266459031789 |

| 4 | 0 |

| 5 | 0 |

| 6 | 0 |

+----+-----------------------------------------+

6 rows in set (0.00 sec)

下面的示例更復(fù)雜一點(diǎn)。查詢返回相似性并依然以相似度遞減的次序返回記錄行。為了完成這個(gè)結(jié)果,你應(yīng)該指定 MATCH() 兩次。這不會(huì)引起附加的開(kāi)銷,因?yàn)?MySQL 優(yōu)化器會(huì)注意到兩次同樣的 MATCH() 調(diào)用,并只調(diào)用一次全文搜索代碼。

mysql> SELECT id, body, MATCH (title,body) AGAINST

-> ('Security implications of running MySQL as root') AS score

-> FROM articles WHERE MATCH (title,body) AGAINST

-> ('Security implications of running MySQL as root');

+----+-------------------------------------+-----------------+

| id | body | score |

+----+-------------------------------------+-----------------+

| 4 | 1. Never run mysqld as root. 2. ... | 1.5055546709332 |

| 6 | When configured properly, MySQL ... | 1.31140957288 |

+----+-------------------------------------+-----------------+

2 rows in set (0.00 sec)


MySQL 使用一個(gè)非常簡(jiǎn)單的剖析器來(lái)將文本分隔成詞。一個(gè)“詞”是由文字、數(shù)據(jù)、“'” 和 “_” 組成的任何字符序列。任何在 stopword 列表上出現(xiàn)的,或太短的(3 個(gè)字符或更少的)的 “word” 將被忽略。


在集和查詢中的每個(gè)合適的詞根據(jù)其在集與查詢中的重要性衡量。這樣,一個(gè)出現(xiàn)在多個(gè)文檔中的詞將有較低的權(quán)重(可能甚至有一個(gè)零權(quán)重),因?yàn)樵谶@個(gè)特定的集中,它有較低的語(yǔ)義值。否則,如果詞是較少的,它將得到一個(gè)較高的權(quán)重。然后,詞的權(quán)重將被結(jié)合用于計(jì)算記錄行的相似性。


這樣一個(gè)技術(shù)工作可很好地工作與大的集(實(shí)際上,它會(huì)小心地與之諧調(diào))。 對(duì)于非常小的表,詞分類不足以充份地反應(yīng)它們的語(yǔ)義值,有時(shí)這個(gè)模式可能產(chǎn)生奇怪的結(jié)果。


mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('MySQL');

Empty set (0.00 sec)


在上面的例子中,搜索詞 MySQL 卻沒(méi)有得到任何結(jié)果,因?yàn)檫@個(gè)詞在超過(guò)一半的記錄行中出現(xiàn)。同樣的,它被有效地處理為一個(gè) stopword (即,一個(gè)零語(yǔ)義值的詞)。這是最理想的行為 -- 一個(gè)自然語(yǔ)言的查詢不應(yīng)該從一個(gè) 1GB 的表中返回每個(gè)次行(second row)。


匹配表中一半記錄行的詞很少可能找到相關(guān)文檔。實(shí)際上,它可能會(huì)發(fā)現(xiàn)許多不相關(guān)的文檔。我們都知道,當(dāng)我們?cè)诨ヂ?lián)網(wǎng)上通過(guò)搜索引擎試圖搜索某些東西時(shí),這會(huì)經(jīng)常發(fā)生。因?yàn)檫@個(gè)原因,在這個(gè)特殊的數(shù)據(jù)集中,這樣的行被設(shè)置一個(gè)低的語(yǔ)義值。


到 4.0.1 時(shí),MySQL 也可以使用 IN BOOLEAN MODE 修飾語(yǔ)來(lái)執(zhí)行一個(gè)邏輯全文搜索。


mysql> SELECT * FROM articles WHERE MATCH (title,body)

-> AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);

+----+------------------------------+-------------------------------------+

| id | title | body |

+----+------------------------------+-------------------------------------+

| 1 | MySQL Tutorial | DBMS stands for DataBase ... |

| 2 | How To Use MySQL Efficiently | After you went through a ... |

| 3 | Optimising MySQL | In this tutorial we will show ... |

| 4 | 1001 MySQL Tricks | 1. Never run mysqld as root. 2. ... |

| 6 | MySQL Security | When configured properly, MySQL ... |

+----+------------------------------+-------------------------------------+

12 下一頁(yè)

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

適宜做簡(jiǎn)單搜索的MySQL數(shù)據(jù)庫(kù)全文索引_MySQL

適宜做簡(jiǎn)單搜索的MySQL數(shù)據(jù)庫(kù)全文索引_MySQL:全文索引在 MySQL 中是一個(gè) FULLTEXT 類型索引。FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 時(shí)或之后使用 ALTER TABLE 或 CREATE INDEX 在 CHAR、VARCHAR 或 TEXT 列上創(chuàng)建。對(duì)于大的數(shù)據(jù)庫(kù),將數(shù)據(jù)裝載到一個(gè)沒(méi)有 FULLTEXT 索引的表
推薦度:
標(biāo)簽: 搜索 軟件 資訊
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top