一文讓你輕松了解全文檢索

全文檢索技術(shù)被廣泛的應(yīng)用于搜索引擎,查詢檢索等領(lǐng)域。我們?cè)诰W(wǎng)絡(luò)上的大部分搜索服務(wù)都用到了全文檢索技術(shù)。

永仁網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)從2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

對(duì)于數(shù)據(jù)量大、數(shù)據(jù)結(jié)構(gòu)不固定的數(shù)據(jù)可采用全文檢索方式搜索,比如百度、Google等搜索引擎、論壇站內(nèi)搜索、電商網(wǎng)站站內(nèi)搜索等。

什么是全文檢索呢?先看一下百度百科的專業(yè)定義。

一文讓你輕松了解全文檢索

為了能更好的理解,我們先看一個(gè)簡(jiǎn)單的例子。

案例

實(shí)現(xiàn)一個(gè)文件的搜索功能,通過(guò)關(guān)鍵字搜索文件,凡是文件名或文件內(nèi)容包括關(guān)鍵字的文件都需要找出來(lái)。還可以根據(jù)中文詞語(yǔ)進(jìn)行查詢,并且需要支持多個(gè)條件查詢。

本案例中的原始內(nèi)容就是磁盤上的一些示例文件,如下圖:

一文讓你輕松了解全文檢索

如果用數(shù)據(jù)庫(kù)實(shí)現(xiàn)的話,數(shù)據(jù)庫(kù)中的搜索很容易實(shí)現(xiàn),通常都是使用sql語(yǔ)句進(jìn)行查詢,而且能很快的得到查詢結(jié)果。

為什么數(shù)據(jù)庫(kù)搜索很容易?

因?yàn)閿?shù)據(jù)庫(kù)中的數(shù)據(jù)存儲(chǔ)是有規(guī)律的,有行有列而且數(shù)據(jù)格式、數(shù)據(jù)長(zhǎng)度都是固定的。

但是,我們生活中的數(shù)據(jù)總體是分為兩種的:結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)。

結(jié)構(gòu)化數(shù)據(jù):指具有固定格式或有限長(zhǎng)度的數(shù)據(jù),如數(shù)據(jù)庫(kù),元數(shù)據(jù)等。

非結(jié)構(gòu)化數(shù)據(jù):指不定長(zhǎng)或無(wú)固定格式的數(shù)據(jù),如郵件,word文檔等磁盤上的文件

結(jié)構(gòu)化數(shù)據(jù)的查詢我們可以通過(guò)sql搞定,那么非結(jié)構(gòu)化的呢?

非結(jié)構(gòu)化數(shù)據(jù)的查詢方法

非結(jié)構(gòu)化數(shù)據(jù)查詢有兩種辦法:
(1)順序掃描法(Serial Scanning)

所謂順序掃描,比如要找內(nèi)容包含某一個(gè)字符串的文件,就是一個(gè)文檔一個(gè)文檔的看,對(duì)于每一個(gè)文檔,從頭看到尾,如果此文檔包含此字符串,則此文檔為我們要找的文件,接著看下一個(gè)文件,直到掃描完所有的文件。如利用windows的搜索也可以搜索文件內(nèi)容,只是相當(dāng)?shù)穆?/p>

(2)全文檢索(Full-text Search)

將非結(jié)構(gòu)化數(shù)據(jù)中的一部分信息提取出來(lái),重新組織,使其變得有一定結(jié)構(gòu),然后對(duì)此有一定結(jié)構(gòu)的數(shù)據(jù)進(jìn)行搜索,從而達(dá)到搜索相對(duì)較快的目的。這部分從非結(jié)構(gòu)化數(shù)據(jù)中提取出的然后重新組織的信息,我們稱之索引。

例如:字典。字典的拼音表和部首檢字表就相當(dāng)于字典的索引,對(duì)每一個(gè)字的解釋是非結(jié)構(gòu)化的,如果字典沒(méi)有音節(jié)表和部首檢字表,在茫茫辭海中找一個(gè)字只能順序掃描。然而字的某些信息可以提取出來(lái)進(jìn)行結(jié)構(gòu)化處理,比如讀音,就比較結(jié)構(gòu)化,分聲母和韻母,分別只有幾種可以一一列舉,于是將讀音拿出來(lái)按一定的順序排列,每一項(xiàng)讀音都指向此字的詳細(xì)解釋的頁(yè)數(shù)。我們搜索時(shí)按結(jié)構(gòu)化的拼音搜到讀音,然后按其指向的頁(yè)數(shù),便可找到我們的非結(jié)構(gòu)化數(shù)據(jù)——也即對(duì)字的解釋。

這種先建立索引,再對(duì)索引進(jìn)行搜索的過(guò)程就叫全文檢索(Full-text Search)。

雖然創(chuàng)建索引的過(guò)程也是非常耗時(shí)的,但是索引一旦創(chuàng)建就可以多次使用,全文檢索主要處理的是查詢,所以耗時(shí)間創(chuàng)建索引是值得的。

那么如何實(shí)現(xiàn)全文檢索呢?

Lucene

提到全文檢索,不得不提到的一個(gè)技術(shù)就是Lucene,Lucene是apache下的一個(gè)開(kāi)放源代碼的全文檢索引擎工具包。提供了完整的查詢引擎和索引引擎,部分文本分析引擎。我們所熟知的全文檢索引擎Solr和ES都是基于Lucene的。

一文讓你輕松了解全文檢索

  • 綠色表示索引過(guò)程,對(duì)要搜索的原始內(nèi)容進(jìn)行索引構(gòu)建一個(gè)索引庫(kù),索引過(guò)程包括:

確定原始內(nèi)容即要搜索的內(nèi)容->采集文檔->創(chuàng)建文檔->分析文檔->索引文檔

  • 紅色表示搜索過(guò)程,從索引庫(kù)中搜索內(nèi)容,搜索過(guò)程包括:

用戶通過(guò)搜索界面->創(chuàng)建查詢->執(zhí)行搜索,從索引庫(kù)搜索->渲染搜索結(jié)果

創(chuàng)建索引

也就是對(duì)文檔索引的過(guò)程,將用戶要搜索的文檔內(nèi)容進(jìn)行索引,索引存儲(chǔ)在索引庫(kù)(index)中。

比如剛才的這些文檔:

一文讓你輕松了解全文檢索

我們要分析其中所有的單詞,將單詞、文檔名建立映射關(guān)系。

(對(duì)于單詞的切分包括了對(duì)原始文檔提取單詞、去除停用詞等過(guò)程,這個(gè)過(guò)程被稱為分詞)

我們分析其中的一篇文檔Lucene.txt:

原文檔內(nèi)容:

Lucene is a Java full-text search engine. Lucene is not a complete

application, but rather a code library and API that can easily be used

to add search capabilities to applications.

我們可以分析后得到語(yǔ)匯單元:

lucene、java、full、search、engine。。。。

另一個(gè)文檔flink.txt加入幾個(gè)單詞:

java flink kakfa

我們也可以得到語(yǔ)匯單元:

java flink kakfa

這樣我們就建立了映射關(guān)系,lucene、java、full、search在Lucene.txt中,而flink不在Lucene.txt中,但是在flink.txt中。java即在Lucene.txt中,也在flink.txt中。

一文讓你輕松了解全文檢索

那當(dāng)我們查找lucene這個(gè)詞,就在Lucene.txt中,但是查找java時(shí)可以獲悉其在這兩個(gè)文件中。

創(chuàng)建索引是對(duì)語(yǔ)匯單元索引,通過(guò)詞語(yǔ)找文檔,這種索引的結(jié)構(gòu)就叫做叫倒排索引結(jié)構(gòu)。

傳統(tǒng)方法是根據(jù)文件找到該文件的內(nèi)容,在文件內(nèi)容中匹配搜索關(guān)鍵字,這種方法是順序掃描方法,數(shù)據(jù)量大、搜索慢。

倒排索引結(jié)構(gòu)是根據(jù)內(nèi)容(詞語(yǔ))找文檔,如下圖:

一文讓你輕松了解全文檢索

倒排索引結(jié)構(gòu)也叫反向索引結(jié)構(gòu),包括索引和文檔兩部分,索引即詞匯表,它的規(guī)模較小,而文檔集合較大。

有倒排索引,對(duì)應(yīng)肯定,有正向索引。正向索引其實(shí)就是順序掃描所有文件,這樣本身效率是極低的。

查詢索引

查詢索引也是搜索的過(guò)程。搜索就是用戶輸入關(guān)鍵字,從索引(index)中進(jìn)行搜索的過(guò)程。根據(jù)關(guān)鍵字搜索索引,根據(jù)索引找到對(duì)應(yīng)的文檔,從而找到要搜索的內(nèi)容(這里指磁盤上的文件)。

我們這里就是通過(guò)查詢索引表,找到文檔所在的位置,就完成了查詢,但其他的場(chǎng)景可以靈活的把查詢出來(lái)的結(jié)果展示出去,比如我們的百度搜索時(shí),為我們展示的是相關(guān)網(wǎng)頁(yè)。

一文讓你輕松了解全文檢索

開(kāi)發(fā)一個(gè)自己的全文檢索

手動(dòng)去開(kāi)發(fā)建立索引和查詢索引的功能需要大量的工作,好在lucene已經(jīng)幫我們完成了大量的工作,只需要調(diào)用java api就可以完成相關(guān)工作。

但是Lucene的API過(guò)于底層,并不簡(jiǎn)單易用,而且缺乏企業(yè)級(jí)的管理工具對(duì)其進(jìn)行監(jiān)控管理,于是企業(yè)級(jí)的全文檢索引擎就應(yīng)運(yùn)而生了,目前最流行的兩個(gè)就是:Solr和ES。他們都是建立在Lucene之上的。

Solr

Solr是Apache Lucene項(xiàng)目的開(kāi)源企業(yè)搜索平臺(tái)。Solr是高度可擴(kuò)展的,并提供了分布式搜索和索引復(fù)制。

一文讓你輕松了解全文檢索

Solr由Java開(kāi)發(fā),運(yùn)行在Servlet容器中,是一個(gè)獨(dú)立的全文搜索服務(wù)器。并具有強(qiáng)大的API和外部配置功能,使得無(wú)需編碼,便可對(duì)其調(diào)整以適應(yīng)多種類型應(yīng)用。

2010年Apache Lucene與Apache Solr項(xiàng)目合并,所以Lucene/Solr成為了Apache一個(gè)項(xiàng)目。

由此可見(jiàn),Solr的優(yōu)勢(shì)就是:

有一個(gè)成熟的開(kāi)發(fā)者社區(qū);本省比較穩(wěn)定;支持多種格式的索引。

但是由于底層機(jī)制的限制,Solr的缺點(diǎn)也很明顯:

建立索引時(shí),搜索效率下降;實(shí)時(shí)索引搜索效率不高。

ES

ES也就是Elasticsearch,是一個(gè)實(shí)時(shí)的分布式搜索和分析引擎,它可以用于全文搜索,結(jié)構(gòu)化搜索以及分析。

一文讓你輕松了解全文檢索

由于Lucene過(guò)于復(fù)雜,不方便使用。Elasticsearch使用Lucene作為內(nèi)部引擎,但是Elasticsearch做搜索引擎時(shí),只需要使用同一的API就可以,而不需要了解復(fù)雜的Lucene原理。

而且Elasticsearch不僅僅可以做全文搜索功能,在企業(yè)中可以作為:

  • 分布式實(shí)時(shí)文件存儲(chǔ);
  • 實(shí)時(shí)分析的分布式搜索引擎;

Elasticsearch的Restful API友好而且簡(jiǎn)單,特別容易上手。

目前包括維基百科、Stackoverflow、Github等都是用Elasticsearch作為其搜索引擎。

ES簡(jiǎn)單體驗(yàn)

這里我們簡(jiǎn)單使用一個(gè)ES完成一個(gè)全文檢索功能。

1、下載

首先在官網(wǎng)下載 ,官網(wǎng)地址:https://www.elastic.co/products/elasticsearch

下載地址如下:https://www.elastic.co/cn/downloads/elasticsearch

選擇自己系統(tǒng)的我們這選擇WIndows版本。

一文讓你輕松了解全文檢索

同時(shí)我們可以下載kibana,kibana是配合ES的一個(gè)可視化工具。

2、安裝部署

解壓 放在d盤

隨后我們?cè)诿钚袉?dòng):

C:\Users\JN>d:
D:>cd 
D:\elasticsearch-6.4.0>cd bin
D:\elasticsearch-6.4.0\bin>elasticsearch.bat

kibana也是

C:\Users\JN>d:
D:>cd kibana-6.4.0-windows-x86_64
D:\kibana-6.4.0-windows-x86_64>cd bin
D:\kibana-6.4.0-windows-x86_64\bin>kibana.bat

部署成功:可以通過(guò)localhost:9200訪問(wèn)es

一文讓你輕松了解全文檢索

localhost:5601訪問(wèn)kibana

一文讓你輕松了解全文檢索

3、簡(jiǎn)單使用

我們簡(jiǎn)單體驗(yàn)一下ES,打開(kāi)kibana的DevTools工具。

分別插入兩條數(shù)據(jù),并進(jìn)行搜索。

使用編程語(yǔ)言調(diào)用ES也與這個(gè)類似,簡(jiǎn)單易用。

一文讓你輕松了解全文檢索

分享標(biāo)題:一文讓你輕松了解全文檢索
網(wǎng)頁(yè)地址:http://bm7419.com/article8/pcdjop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、營(yíng)銷型網(wǎng)站建設(shè)網(wǎng)站建設(shè)、小程序開(kāi)發(fā)、靜態(tài)網(wǎng)站品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)