久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL中如何實現(xiàn)全文搜索操作

139次閱讀
沒有評論

共計 3448 個字符,預(yù)計需要花費 9 分鐘才能閱讀完成。

本篇文章為大家展示了 MySQL 中如何實現(xiàn)全文搜索操作,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

全文搜索通過 MATCH()函數(shù)完成。

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

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

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

前面的例子是函數(shù) MATCH()使用上的一些基本說明。記錄行以相似性遞減的順序返回。

下一個示例顯示如何檢索一個明確的相似性值。如果即沒有 WHERE 也沒有 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ù)雜一點。查詢返回相似性并依然以相似度遞減的次序返回記錄行。為了完成這個結(jié)果,你應(yīng)該指定 MATCH()兩次。這不會引起附加的開銷,因為 MySQL 優(yōu)化器會注意到兩次同樣的 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 使用一個非常簡單的剖析器來將文本分隔成詞。一個“詞”是由文字、數(shù)據(jù)、“”和“_”組成的任何字符序列。任何在 stopword 列表上出現(xiàn)的,或太短的 (3 個字符或更少的) 的“word”將被忽略。

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

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

mysql SELECT * FROM articles WHERE MATCH (title,body) AGAINST (MySQL);
Empty set (0.00 sec)在上面的例子中,搜索詞 MySQL 卻沒有得到任何結(jié)果,因為這個詞在超過一半的記錄行中出現(xiàn)。同樣的,它被有效地處理為一個 stopword (即,一個零語義值的詞)。這是最理想的行為 — 一個自然語言的查詢不應(yīng)該從一個 1GB 的表中返回每個次行(second row)。

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

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

mysql SELECT * FROM articles WHERE MATCH (title,body)
  –   AGAINST (+MySQL -YourSQL IN BOOLEAN MODE);
+—-+——————————+————————————-+
| id | title  | body  |
+—-+——————————+————————————-+

上述內(nèi)容就是 MySQL 中如何實現(xiàn)全文搜索操作,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-01發(fā)表,共計3448字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 泸州市| 赞皇县| 涿州市| 北京市| 大宁县| 内丘县| 玛沁县| 杭州市| 邵武市| 定日县| 梁平县| 志丹县| 汨罗市| 呼和浩特市| 临洮县| 万盛区| 海兴县| 长沙市| 阿拉善右旗| 乳山市| 措勤县| 文水县| 漳浦县| 剑阁县| 杭锦后旗| 张家港市| 蒙自县| 纳雍县| 北川| 临城县| 吉安县| 双鸭山市| 石城县| 大同市| 太仆寺旗| 安龙县| 义马市| 利辛县| 乌恰县| 驻马店市| 山阳县|