国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
MySQL全文搜索2

MySQL全文搜索。

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

  全文搜索通過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 ...       |
+----+-------------------+------------------------------------------+

關(guān)鍵字: phpMyAdmin MySQL內(nèi)核 數(shù)據(jù)庫安全配置 用戶認證模塊 密碼恢復

MySQL全文搜索。

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

  當MATCH()被使用在一個WHERE子句中時 (參看上面的例子),返回的記錄行被自動地以相關(guān)性從高到底的次序排序。相關(guān)性值是非負的浮點數(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 |
+----+-----------------------------------------+

關(guān)鍵字: phpMyAdmin MySQL內(nèi)核 數(shù)據(jù)庫安全配置 用戶認證模塊 密碼恢復

MySQL全文搜索。

  6 rows in set (0.00 sec)下面的示例更復雜一點。查詢返回相似性并依然以相似度遞減的次序返回記錄行。為了完成這個結(jié)果,你應該指定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é)合用于計算記錄行的相似性。

關(guān)鍵字: phpMyAdmin MySQL內(nèi)核 數(shù)據(jù)庫安全配置 用戶認證模塊 密碼恢復

MySQL全文搜索。

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

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

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

  匹配表中一半記錄行的詞很少可能找到相關(guān)文檔。實際上,它可能會發(fā)現(xiàn)許多不相關(guān)的文檔。我們都知道,當我們在互聯(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                |
+----+------------------------------+-------------------------------------+
| 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 ... |
+----+------------------------------+-------------------------------------+

關(guān)鍵字: phpMyAdmin MySQL內(nèi)核 數(shù)據(jù)庫安全配置 用戶認證模塊 密碼恢復

MySQL全文搜索。

  這個查詢返回所有包含詞MySQL的記錄行(注意: 50% 的閾值沒有使用),但是它沒有包含詞YourSQL。注意,一個邏輯模式的搜索不會自動地以相似值的降序排序記錄行。你可以從上面的結(jié)果出看得出來,最高的相似值(包含MySQL兩次的那個) 最列在最后,而不是第一位。一個邏輯全文搜索即使在沒有一個FULLTEXT索引的情況下也可以工作,然而它慢些。

  邏輯全文搜索支持下面的操作符:

  +

  一個領(lǐng)頭的加號表示,該詞必須出現(xiàn)在每個返回的記錄行中。

  -

  一個領(lǐng)頭的減號表示,該詞必須不出現(xiàn)在每個返回的記錄行中。

  缺省的 (當既沒有加號也沒有負號被指定時)詞是隨意的,但是包含它的記錄行將被排列地更高一點。這個模仿沒有IN BOOLEAN MODE修飾詞的MATCH() ... AGAINST()的行為。

  < >

  這兩個操作符用于改變一個詞的相似性值的基值。<操作符減少基值,>操作符則增加它。參看下面的示例。

  ( )

  圓括號用于對子表達式中的詞分組。

  ~

  一個領(lǐng)頭的否定號的作用象一個否定操作符,引起行相似性的詞的基值為負的。它對標記一個噪聲詞很有用。一個包含這樣的詞的記錄將被排列得低一點,但是不會被完全的排除,因為這樣可以使用-操作符。

  *

  一個星號是截斷操作符。不想其它的操作符,它應該被追加到一個詞后,不加在前面。

  "

  短語,被包圍在雙引號"中,只匹配包含這個短語(字面上的,就好像被鍵入的)的記錄行。

  這里是一些示例:

  apple banana

  找至少包含上面詞中的一個的記錄行

  +apple +juice

  ... 兩個詞均在被包含

  +apple macintosh

  ... 包含詞 “apple”,但是如果同時包含 “macintosh”,它的排列將更高一些

關(guān)鍵字: phpMyAdmin MySQL內(nèi)核 數(shù)據(jù)庫安全配置 用戶認證模塊 密碼恢復

MySQL全文搜索。

  +apple -macintosh

  ... 包含 “apple” 但不包含 “macintosh”

  +apple +(>pie <strudel)

  ... 包含 “apple” 和 “pie”,或者包含的是 “apple” 和 “strudel” (以任何次序),但是 “apple pie” 排列得比 “apple strudel” 要高一點

  apple*

  ... 包含 “apple”,“apples”,“applesauce” 和 “applet”

  "some words"

  ... 可以包含 “some words of wisdom”,但不是 “some noise words”

  全文的限制

  MATCH()函數(shù)的所有參數(shù)必須是從來自于同一張表的列,同時必須是同一個FULLTEXT索引中的一部分,除非MATCH()是IN BOOLEAN MODE的。

  MATCH()列列表必須確切地匹配表的某一FULLTEXT索引中定義的列列表,除非MATCH()是IN BOOLEAN MODE的。

  AGAINST()的參數(shù)必須是一個常量字符串。

  微調(diào) MySQL 全文搜索

  不幸地,全文搜索仍然只有很少的用戶可調(diào)參數(shù),雖然增加一些在 TODO 上排列很高。如果你有一個 MySQL 源碼發(fā)行,你可以發(fā)揮對全文搜索的更多控制。

  注意,全文搜索為最佳的搜索效果,被仔細地調(diào)整了。修改默認值的行為,在大多數(shù)情況下,只會使搜索結(jié)果更糟。不要修改 MySQL 的源代碼,除非你知道你在做什么!

  被索引的詞的最小長度由 MySQL 變量ft_min_word_len指定。

  stopword 列表可以從ft_stopword_file變量指定的文件中讀取。

  50% 閾值選擇由所選擇的特殊的衡量模式確定。為了禁止它,修改`myisam/ftdefs.h'文件中下面的一行:

 

  #define GWS_IN_USE GWS_PROB改為:

  #define GWS_IN_USE GWS_FREQ然后重新編譯 MySQL。在這種情況下,不需要重建索引。注意:使用了這個,將嚴重地減少 MySQL 為MATCH()提供足夠的相似性值的能力。如果你確實需要搜索這樣的公共詞,最好使用IN BOOLEAN MODE的搜索代替,它不遵守 50% 的閾值。

  有時,搜索引擎維護員希望更改使用于邏輯全文搜索的操作符。這些由變量ft_boolean_syntax定義。對于這些更改,要求你重建你的FULLTEXT索引,對于一個 MyISAM 表,最容易的重建索引文件的方式如下面的語句:

  mysql> REPAIR TABLE tbl_name QUICK;全文搜索 TODO

  使所有對FULLTEXT索引的操作更快

  鄰近(Proximity)操作符

  對 "always-index words" 的支持。他們可以是用戶希望視為一個詞處理的任意字符串,例如 "C++"、"AS/400"、"TCP/IP",等等

  支持在MERGE表中的全文搜索

  對多字節(jié)字符的支持

  依照數(shù)據(jù)的語言建立 stopword 列表

  Stemming (當然,依賴于數(shù)據(jù)的語言)

  Generic user-suppliable UDF preparser.

  使模式更加靈活 (通過為CREATE/ALTER TABLE中的FULLTEXT增加某些可調(diào)整參數(shù))

 

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
MySQL使用全文索引(fulltext index)
MySQL必知必會1-20章讀書筆記
MySQL必知必會學習筆記》:全文本搜索
mysql8全文索引
MySQL全文索引應用簡明教程
MySQL(五) MySQL中的索引詳講
更多類似文章 >>
生活服務
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服