我們生活中的數(shù)據(jù)分為結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù):
結(jié)構(gòu)化數(shù)據(jù):具有固定格式或有限長度的數(shù)據(jù),可以用二維表結(jié)構(gòu)來邏輯表達(dá)實現(xiàn)的纵势,如數(shù)據(jù)庫踱阿,元數(shù)據(jù)等。
非結(jié)構(gòu)化數(shù)據(jù):指不定長或無固定格式的數(shù)據(jù)钦铁,如辦公文檔软舌、文本、圖片牛曹、XML佛点、HTML、各類報表黎比、圖像和音頻/視頻信息等等超营。也叫全文數(shù)據(jù)。
對于結(jié)構(gòu)化數(shù)據(jù)的搜索:如對數(shù)據(jù)庫的搜索焰手,用 SQL 語句糟描。再如對元數(shù)據(jù)的搜索,如利用windows 搜索對文件名书妻,類型船响,修改時間進(jìn)行搜索等。
對非結(jié)構(gòu)化數(shù)據(jù)的搜索:如利用 windows 的搜索也可以搜索文件內(nèi)容躲履,Linux 下的 grep命令见间,再如用 Google 和百度可以搜索大量內(nèi)容數(shù)據(jù)。
對非結(jié)構(gòu)化數(shù)據(jù)也即對全文數(shù)據(jù)的搜索主要有兩種方法:
一種是順序掃描法:比如在一個項目中找一個接口名為 queryTest 的接口工猜,就是在項目里一個文件一個文件的找米诉,對于每個文檔從頭到尾的去找,直到掃描項目里面的所有文件篷帅。window 的搜索文件內(nèi)容史侣,linux 的 grep 命令就是如此的。小數(shù)據(jù)量的文件還可以接受魏身,如果對于大量的文件惊橱,方法就很慢了。
另一種方法就是通過索引:把非結(jié)構(gòu)化數(shù)據(jù)重新設(shè)計成有一定的結(jié)構(gòu)箭昵,利用結(jié)構(gòu)化的數(shù)據(jù)采取一定的搜索算法加快速度税朴。把非結(jié)構(gòu)化數(shù)據(jù)中提取出的然后重新組織的信息,稱之為索引。比如字典正林,字典的拼音表和部首檢字表就是相當(dāng)于字典的索引泡一,對每一個字的解釋就是非結(jié)構(gòu)化的,如果字典沒有音節(jié)表和部首檢字表觅廓,在茫茫辭海中找一個字只能順序掃描鼻忠。
然而字的某些信息可以提取出來進(jìn)行結(jié)構(gòu)化處理,比如讀音哪亿,就比較結(jié)構(gòu)化粥烁,分聲母和韻母,分別只有幾種可以一一列舉蝇棉,于是將讀音拿出來按一定的順序排列讨阻,每一項讀音都指向此字的詳細(xì)解釋的頁數(shù)。我們搜索時按結(jié)構(gòu)化的拼音搜到讀音篡殷,然后按其指向的頁數(shù)钝吮,便可找到我們的非結(jié)構(gòu)化數(shù)據(jù)——也即對字的解釋。
這種先建立索引板辽,在對索引進(jìn)行搜索的過程叫全文檢索奇瘦。
全文檢索大體分兩個過程,索引創(chuàng)建(Indexing)和搜索索引(Search)劲弦。
索引創(chuàng)建:將現(xiàn)實世界中所有的結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)提取信息耳标,創(chuàng)建索引的過程。
搜索索引:通過用戶的查詢請求搜索創(chuàng)建的索引邑跪,然后返回查詢結(jié)果的過程次坡。