全文索引的概念及原理

2021-06-09 15:48:58 字數 2026 閱讀 4424

索引所有搜尋引擎的乙個核心概念:將原始資料處理成乙個高效的交差引用的查詢結構以便於快速的搜尋。我們生活中的資料總體分為兩種:結構化資料非結構化資料

·結構化資料:指具有固定格式或有限長度的資料,如資料庫,元資料等。

·非結構化資料:指不定長或無固定格式的資料,如郵件,word文件等。

當然有的地方還會提到第三種,半結構化資料,如xml,html等,當根據需要可按結構化資料來處理,也可抽取出純文字按非結構化資料來處理。

非結構化資料又一種叫法叫全文資料。

按照資料的分類,搜尋也分為兩種:

·對結構化資料的搜尋:如對資料庫的搜尋,用sql語句。再如對元資料的搜尋,如利用windows搜尋對檔名,型別,修改時間進行搜尋等。

對非結構化資料也即對全文資料的搜尋主要有兩種方法:

一種是順序掃瞄法 (serial scanning) :所謂順序掃瞄,比如要找內容包含某乙個字串的檔案,就是乙個文件乙個文件的看,對於每乙個文件,從頭看到尾,如果此文件包含此字串,則此文件為我們要找的檔案,接著看下乙個檔案,直到掃瞄完所有的檔案。

對非結構化資料順序掃瞄很慢,對結構化資料的搜尋卻相對較快(由於結構化資料有一定的結構可以採取一定的搜尋演算法加快速度),那麼把我們的非結構化資料想辦法弄得有一定結構不就行了嗎?這種想法構成了全文檢索的基本思路,也即將非結構化資料中的一部分資訊提取出來,重新組織,使其變得有一定結構,然後對此有一定結構的資料進行搜尋,從而達到搜尋相對較快的目的。

這部分從非結構化資料中提取出的然後重新組織的資訊,我們稱之索引這種先建立索引,再對索引進行搜尋的過程就叫全文檢索(full-text search)。全文檢索的大大快了搜尋的速度。比如,字典的拼音表和部首檢字表就相當於字典的索引,對每乙個字的解釋是非結構化的,如果字典沒有索引,在茫茫辭海中找乙個字只能順序掃瞄。然而字的某些資訊可以提取出來進行結構化處理,比如讀音,於是將讀音拿出來按一定的順序排列,每一項讀音都指向此字的詳細解釋的頁數。我們搜尋時按結構化的拼音搜到讀音,然後按其指向的頁數,便可找到我們的非結構化資料——也即對字的解釋。

有人可能會說,全文檢索的確加快了搜尋的速度,但是多了索引的過程,兩者加起來不一定比順序掃瞄快多少。的確,加上索引的過程,全文檢索不一定比順序掃瞄快,尤其是在資料量小的時候更是如此。而對乙個很大量的資料建立索引也是乙個很慢的過程。然而兩者還是有區別的,順序掃瞄是每次都要掃瞄,而建立索引的過程僅僅需要一次,以後每次搜尋,僅僅搜尋建立好的索引就可以了。

這也是全文搜尋相對於順序掃瞄的優勢之一:一次索引,多次使用。

全文檢索大體分兩個過程,索引建立 (indexing)搜尋索引 (search)

索引建立:將現實世界中所有的結構化和非結構化資料提取資訊,建立索引的過程。搜尋索引:就是得到使用者的查詢請求,搜尋建立的索引,然後返回結果的過程。全文索引技術的核心機制是倒排索引結構。

我們再來看為什麼順序掃瞄的速度慢:其實是由於我們想要搜尋的資訊和非結構化資料中所儲存的資訊不一致造成的。非結構化資料中所儲存的資訊是每個檔案包含哪些字串,即是從檔案到字串的對映。而我們想搜尋的資訊是哪些檔案包含此字串,也即已知字串,欲求檔案,也即從字串到檔案的對映。兩者恰恰相反。於是如果索引總能夠儲存從字串到檔案的對映,則會大大提高搜尋速度。由於從字串到檔案的對映是檔案到字串對映的反向過程,於是儲存這種資訊的索引稱為反向索引倒排索引

倒排索引是一種面向單詞的索引機制,其索引結構通常由「詞典」和「詞出現情況」兩部分組成。對「詞典」中每個詞都會記錄其出現的文件列表及在它在每個文件中出現的次數及位置等資訊。一般的文件建立的是一種「文件到單詞」的對映關係,而倒排索引建立的則是一種「單詞到文件」的對映關係。因為日常檢索通常都是按照關鍵字進行搜尋的,所以倒排索引可以更好的適合這種檢索機制的需要,從而被大規模的使用。

mysql全文索引的坑 MySQL全文索引問題

我有乙個包含以下資料的 文章 mysql select from articles id title body 1 mysql tutorial dbms stands for database 2 how to use mysql well after you went through a 3 o...

建立全文索引

建立全文索引 在進行全文檢索之前,必須先建立和填充資料庫全文索引。為了支援全文索引操作,sql server 7.0新增了一些儲存過程和transact sql語句。使用這些儲存過程建立全文索引的具體步驟如下 括號內為呼叫的儲存過程名稱 1.啟動資料庫的全文處理功能 sp fulltext data...

mysql全文索引

了解 solr 之後 發現全文索引也能做檢索 故了解了下 筆記如下 建立全文索引 alter table table add fulltext index fulltext table 列1 列2 查詢方式 select from table where match 列1 列2 against 查詢...