全文檢索索引的基本原理

來源:互聯網
上載者:User

標籤:ase   方式   表示   text   格式   solr   百度   arc   方法   

什麼是全文檢索索引?

我們生活中的資料總體分為兩種:結構化資料和非結構化資料。

* 結構化資料:指具有固定格式或有限長度的資料,如資料庫,中繼資料等。* 非結構化資料:指不定長或無固定格式的資料,如郵件,word文檔等。

 

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

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

* 對結構化資料的搜尋:如對資料庫的搜尋,用SQL語句。再如對中繼資料的搜尋,如利用windows搜尋對檔案名稱,類型,修改時間進行搜尋等。* 對非結構化資料的搜尋:如利用windows的搜尋也可以搜尋檔案內容,Linux下的grep命令,再如用Google和百度可以搜尋大量內容資料。

 

非結構化資料搜尋方法順序掃描法(Serial Scanning)
所謂順序掃描,比如要找內容包含某一個字串的檔案,就是一個文檔一個文檔的看,對於每一個文檔,從頭看到尾,如果此文檔包含此字串,則此文檔為我們要找的檔案,接著看下一個檔案,直到掃描完所有的檔案。如利用windows的搜尋也可以搜尋檔案內容,只是相當的慢。如果你有一個80G硬碟,如果想在上面找到一個內容包含某字串的檔案,不花他幾個小時,怕是做不到。Linux下的grep命令也是這一種方式。大家可能覺得這種方法比較原始,但對於小資料量的檔案,這種方法還是最直接,最方便的。但是對於大量的檔案,這種方法就很慢了。
全文索引
全文檢索索引的基本思路
  將非結構化資料中的一部分資訊提取出來,重新組織,使其變得有一定結構,然後對此有一定結構的資料進行搜尋,從而達到搜尋相對較快的目的。這部分從非結構化資料中提取出的然後重新組織的資訊,我們稱之索引。這種先建立索引,再對索引進行搜尋的過程就叫全文檢索索引(Full-text Search)。
字典樣本
比如字典,字典的拼音表和部首檢字表就相當於字典的索引,對每一個字的解釋是非結構化的,如果字典沒有音節表和部首檢字表,在茫茫辭海中找一個字只能順序掃描。然而字的某些資訊可以提取出來進行結構化處理,比如讀音,就比較結構化,分聲母和韻母,分別只有幾種可以一一列舉,於是將讀音拿出來按一定的順序排列,每一項讀音都指向此字的詳細解釋的頁數。搜尋時按結構化的拼音搜到讀音,然後按其指向的頁數,便可找到我們的非結構化資料——也即對字的解釋。
全文檢索索引的一般過程

圖來自《Lucene in action》
全文檢索索引大體分兩個過程,索引建立(Indexing)和搜尋索引(Search)。

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

於是全文檢索索引就存在三個重要問題:

1、索引裡面究竟存些什嗎?(Index)2、如何建立索引?(Indexing)
3、如何對索引進行搜尋?(Search)

 

索引存些什嗎?

為什麼順序掃描的速度慢?是由於要搜尋的資訊和非結構化資料中所儲存的資訊不一致造成的。
非結構化資料中所儲存的資訊是每個檔案包含哪些字串,也即已知檔案,欲求字串相對容易,也即是從檔案到字串的映射。
而我們想搜尋的資訊是哪些檔案包含此字串,也即已知字串,欲求檔案,也即從字串到檔案的映射。

反向索引

兩者恰恰相反。於是如果索引總能夠儲存從字串到檔案的映射,則會大大提高搜尋速度。
由於從字串到檔案的映射是檔案到字串映射的反向過程,於是儲存這種資訊的索引稱為反向索引。

反向索引儲存的資訊(詞典-倒排表)

假設我的文件集合裡面有100篇文檔,為了方便表示,我們為文檔編號從1到100,得到下面的結構

左邊儲存的是一系列字串,稱為詞典。
每個字串都指向包含此字串的文檔(Document)鏈表,此文檔鏈表稱為倒排表(Posting List)。
有了索引,便使儲存的資訊和要搜尋的資訊一致,可以大大加快搜尋的速度。

反向索引查詢樣本

比如說,我們要尋找既包含字串“lucene”又包含字串“solr”的文檔,我們只需要以下幾步:

  1. 取出包含字串“lucene”的文檔鏈表。
  2. 取出包含字串“solr”的文檔鏈表。
  3. 通過合并鏈表,找出既包含“lucene”又包含“solr”的檔案。
反向索引的優缺點
  1. 缺點:加上建立索引的過程,全文檢索索引不一定比順序掃描快,尤其是在資料量小的時候更是如此。而對一個很大量的資料建立索引也是一個很慢的過程。
  2. 優點:順序掃描是每次都要掃描,而全文索引可一次索引,多次使用;檢索速度快。
如何建立索引?

全文檢索索引的索引建立過程一般有以下幾步:

一、待索引的原文檔(Document)二、將原文檔(Document)傳給分片語件(Tokenizer)

分片語件(Tokenizer)會做以下幾件事情(此過程稱為Tokenize):

  1. 將文檔分成一個一個單獨的單詞;
  2. 去除標點符號;
  3. 去除停用詞(Stop word);  所謂停用詞(Stop word)就是一種語言中最普通的一些單詞,由於沒有特別的意義,因而大多數情況下不能成為搜尋的關鍵詞,因而建立索引時,這種詞會被去掉而減少索引的大小。英語中停用詞(Stop word)如:“the”,“a”,“this”等。對於每一種語言的分片語件(Tokenizer),都有一個停詞(stop word)集合。經過分詞(Tokenizer)後得到的結果稱為詞次(Token)。

 

三、將詞次(Token)傳給語言處理組件(Linguistic Processor)

語言處理組件(linguistic processor)主要是對得到的詞次(Token)做一些同語言相關的處理。
對於英語,語言處理組件(Linguistic Processor)一般做以下幾點:

  1. 變為小寫(Lowercase)
  2. 將單詞縮減為詞根形式,如“cars”到“car”等。這種操作稱為:stemming
  3. 將單詞轉變為詞根形式,如“drove”到“drive”等。這種操作稱為:lemmatization。  語言處理組件(linguistic processor)的結果稱為詞元(Term)。

 

四、將詞元(Term)傳給索引組件(Indexer)

索引組件(Indexer)主要做以下幾件事情:

1、利用得到的詞(Term)建立一個字典(Term-DocumentID)
2、對字典按字母順序進行排序。3、合并相同的詞元(Term)成為文檔倒排(Posting List)鏈表。  在此表中,有幾個定義:    Document Frequency 即文檔頻次,表示總共有多少檔案包含此詞(Term)。    Frequency 即詞頻率,表示此檔案中包含了幾個此詞(Term)。

 轉自:https://www.cnblogs.com/wwwggg/p/5588698.html

全文檢索索引的基本原理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.