亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于ElasticSearch的分布式全文搜索系統(tǒng)

        2018-07-23 05:31:08劉文清舒紅平
        電子科技 2018年8期
        關鍵詞:全文檢索詞條搜索引擎

        王 偉,魏 樂,劉文清,舒紅平

        (1.成都信息工程大學 計算機學院,四川 成都 610225;2.國家統(tǒng)計局統(tǒng)計信息技術與數(shù)據(jù)挖掘重點開放實驗室,四川 成都 610103)

        隨著信息技術的發(fā)展,互聯(lián)網(wǎng)的數(shù)據(jù)急劇增加,在海量復雜的數(shù)據(jù)中,如何高效便捷地獲取信息[1]已成為當前互聯(lián)網(wǎng)服務商亟待解決的問題,搜索系統(tǒng)的出現(xiàn)很好的解決了這一問題。搜索系統(tǒng)是指能對文本中特定關鍵字執(zhí)行檢索操作的軟件系統(tǒng),通常將能夠進行全文檢索的軟件系統(tǒng)稱為搜索引擎。但是,目前互聯(lián)網(wǎng)上常見的各類搜索引擎架構以集中式為主,在容錯性、訪問效率、可擴展性、I/O方面存在瓶頸,越來越難以應對數(shù)據(jù)量飛速增加所帶來的問題。

        Lucene[2]屬于Jakarta項目下的子項目,是由Apache基金會開源的搜索引擎工具包。它為程序開發(fā)人員提供了一套實用的工具,這套工具包含了相關性、索引、排序等搜索引擎基礎功能,在此基礎上用戶可以搭建一個完整的搜索系統(tǒng)。在各個領域中,Lucene都被認為是目前為止性能最優(yōu)、功能最完善、技術領先的搜索引擎庫。但作為開發(fā)庫而言,Lucene和真正的搜索引擎不能一概而論,使用Lucene搭建搜索引擎仍然要解決數(shù)據(jù)接入、獲取、分析等方面的問題,而且Lucene沒有提供對分布式的解決方案,在對大量數(shù)據(jù)進行并行處理時會比較麻煩。

        ElasticSearch[3]是一款基于Lucene工具包的支持分布式的開源全文檢索系統(tǒng),在企業(yè)中非常受歡迎,維基百科(Wikipedia)、StackOverflow、Github等公司的全文檢索、關鍵詞高亮、實時鍵入搜索、自動糾錯、相關內容推薦等功能都是基于ElasticSearch實現(xiàn)的。除此之外,ElasticSearch也備受創(chuàng)業(yè)公司的青睞,它對機器的性能沒有較嚴苛的要求,即使在普通PC機組成的集群中也可以正常運行。

        ElasticSearch雖然在企業(yè)中得到了應用,但是因為ElasticSearch屬于較新的技術框架,在構建系統(tǒng)時還面臨接入技術選型、數(shù)據(jù)索引等問題。針對這些問題,本文在基于ElasticSearch技術的基礎上,提出基于ElasticSearch的分布式全文搜索系統(tǒng)實現(xiàn)方案,對其中關鍵技術進行了深入研究。

        1 全文搜索引擎框架分析

        1.1 ETL數(shù)據(jù)接入技術

        從數(shù)據(jù)流向開始,就需要確定數(shù)據(jù)以何種方式同步或遷移到系統(tǒng)中,在數(shù)據(jù)同步或遷移過程中可能出現(xiàn)數(shù)據(jù)冗余問題,因此需要實現(xiàn)一個可以校驗重復數(shù)據(jù)且可靠性高的數(shù)據(jù)接入過程,所以,數(shù)據(jù)整合工具是必有產(chǎn)物。ETL[4](Extract-Transform-Load)技術屬于數(shù)據(jù)整合技術的一種,主要完成將數(shù)據(jù)從一個或多個數(shù)據(jù)源到另一個數(shù)據(jù)源的抽取、轉換、校驗等工作。

        ETL處理步驟:首先通過一個驗證節(jié)點確定輸入端抽取到的數(shù)據(jù)是什么類型,然后把數(shù)據(jù)送到特定的轉換節(jié)點處進行處理,數(shù)據(jù)處理完成后將其傳遞到下一個轉換節(jié)點或一個目標文件,如果發(fā)生錯誤則轉移到處理錯誤的流程上進行相應的處理。

        1.2 倒排索引數(shù)據(jù)結構

        分布式全文搜索系統(tǒng)通過索引器對接入的數(shù)據(jù)源中的數(shù)據(jù)進行具體的分析及分類,然后建立索引。從靜態(tài)層面來看,每個數(shù)據(jù)索引都是針對特定詞元創(chuàng)建的倒排索引[5](Inverted Index),倒排索引是ElasticSearch針對全文檢索使用的索引數(shù)據(jù)結構,對于搜索引擎而言,數(shù)據(jù)結構的重要性要高于程序編碼。

        倒排索引由兩部分構成完整的映射,分別是文檔中出現(xiàn)的詞條列表和詞條在文檔中對應的位置,分別表示為:D={d1,d2,…,dn},T={t1,t2,…,tn}。

        即給出一個詞條ti在不同dj中出現(xiàn)的次數(shù),把對所有文檔中不同詞條出現(xiàn)情況描述的表稱為倒排索引表。

        例如,存在兩個文檔,文檔內容分別為(英文默認按空格切分,而中文一般要通過中文分詞[6]過程,不同中文分詞算法得到的結果不同,這里不展開討論):

        (1)You can exactly find that the characteristic of ElasticSearch is easy to get started with。

        (2)That exact points of ElasticSearch have always been its distributed model。

        創(chuàng)建倒排索引時需要對文檔的內容進行劃分,然后把得到的詞條進行排序,從上文例句中可得表1。

        表1 舉例中對應的倒排索引表

        如果搜索“that ElasticSearch”,從表1中可以查詢到兩個文檔都會被關鍵詞匹配,文檔2中有1個匹配詞,文檔1中有兩個匹配詞,如果根據(jù)簡單的相似度算法計算文檔被關鍵詞匹配的次數(shù),就可以得到文檔1的相關度大于文檔2。

        但是在實際應用中,用戶希望搜索下列情況中兩個相關詞中的任意一個時,兩個相關詞都能同時被匹配到,上述索引表不能實現(xiàn)用戶的這一需求:

        情況1That和that首字母大小寫;

        情況2exact和exactly是同根詞;

        情況3characteristic和point是同義詞。

        因此,需要在索引器中加入相應規(guī)則,把相關詞轉成統(tǒng)一的標準格式,例如:

        (1)That可以轉成that;

        (2)exactly可以轉成exact;

        (3)同義詞characteristic和point只索引成characteristic。

        1.3 倒排索引性能分析

        為了分析Elasticsearch中倒排索引結構對搜索性能的影響,設以下變量:

        (1)不同倒排索引表的長度為Sj;

        (3)因為數(shù)據(jù)的差異性,取d作為數(shù)據(jù)量的平均值;

        (4)作為搜索引擎,在分析性能時還需要考慮系統(tǒng)響應時間t、系統(tǒng)輸出峰值O以及查詢操作數(shù)q。

        現(xiàn)依據(jù)上述參數(shù)建立ElasticSearch索引的性能模型。根據(jù)同一時間的查詢操作q得出:ElasticSearch中存在的所有數(shù)據(jù)量D=倒排索引表的平均數(shù)據(jù)量×所有查詢操作涉及到的表的個數(shù)。

        對于q個查詢操作,每個查詢可能指向N個詞條集合中的任意一個或多個,即可能存在的映射個數(shù)為Nq。q個查詢指向N個詞條中的某一個詞條的數(shù)量范圍為[1,k],對于某個詞條上的不同查詢操作數(shù)的概率記為fN,q(i),i=1,2,…,k??傻?/p>

        (1)

        以上模型建立在每個查詢操作是隨機、獨立的。

        從模型可以看出,這兩點在使用倒排索引作為索引結構的ElasticSearch分布式系統(tǒng)中,極大的改善了集中式搜索引擎的并行處理的瓶頸。

        2 分布式全文搜索系統(tǒng)設計與實現(xiàn)

        分布式全文搜索系統(tǒng)是在海量數(shù)據(jù)中提供秒數(shù)量級查詢服務的系統(tǒng),能夠對數(shù)據(jù)進行存儲、冗余備份及全文檢索,可適當?shù)貙?shù)據(jù)進行統(tǒng)計和分類。

        2.1 系統(tǒng)總體架構

        針對數(shù)據(jù)規(guī)模、性能要求和功能需求,基于ElasticSearch的分布式全文搜索系統(tǒng)包括數(shù)據(jù)同步和數(shù)據(jù)索引等,主要分成數(shù)據(jù)接入、數(shù)據(jù)索引、全文搜索3個模塊設計。

        圖1 全文搜索系統(tǒng)架構

        如圖1所示,全文搜索系統(tǒng)從指定數(shù)據(jù)源爬取數(shù)據(jù),通過Kettle(一款基于Java的開源ETL工具)接入到ElasticSearch集群中,并建立對應的倒排索引表,經(jīng)過排序后提供接口[7]給搜索模塊調用并最終供用戶使用。

        2.2 系統(tǒng)結構設計

        首先數(shù)據(jù)接入模塊完成對數(shù)據(jù)的遷移工作,考慮到系統(tǒng)的結構設計簡單化,盡量以ElasticSearch作為系統(tǒng)唯一的數(shù)據(jù)存儲模塊。但一些應用場景下[8-10],需要在現(xiàn)有的系統(tǒng)基礎上新增ElasticSearch的檢索支持,以避免系統(tǒng)新增全文檢索支持帶來的重構風險。本系統(tǒng)采用Kettle作為數(shù)據(jù)同步工具,支持和常用數(shù)據(jù)庫之間的數(shù)據(jù)遷移、同步工作,如圖2所示。

        圖2 ElasticSearch數(shù)據(jù)同步場景

        這是一種典型的數(shù)據(jù)接入同步過程,存在多個數(shù)據(jù)源,一個數(shù)據(jù)緩沖區(qū),一個可以被用戶訪問到的ElasticSearch集群,數(shù)據(jù)緩沖區(qū)和集群之間的數(shù)據(jù)抽取都是通過Kettle技術來完成的。其中數(shù)據(jù)緩沖區(qū)主要負責暫時存放從源中抽取到的數(shù)據(jù)。

        系統(tǒng)采用Bulk方式的批量索引數(shù)據(jù)[11],可以把多個索引操作通過一次請求發(fā)送到集群中,再通過每個數(shù)據(jù)的id做哈希轉換,進而把不同數(shù)據(jù)分配到對應分片上。在對數(shù)據(jù)進行分片以后,還需要對詞條進行分析處理,包括字符過濾和字符轉換等數(shù)據(jù)清洗工作。之后,數(shù)據(jù)索引模塊再選用合適的分詞器對處理后的數(shù)據(jù)做進一步加工,通過索引器建立索引結構提供給搜索模塊使用。全文搜索模塊是在ElasticSearch分布式集群上,根據(jù)用戶輸入的信息[12],以及選擇的搜索方式執(zhí)行實時搜索并返回結果。

        全文搜索模塊給用戶提供一個圖形化交互性界面[13],主要對終端用戶提交的關鍵字進行解析,再選擇合適的搜索方式向Jetty容器提交搜索請求,Jetty容器對請求解析后分發(fā)給集群中的各個分片,在得到全部分片的分布式響應后,把結果反饋給用戶。

        2.3 系統(tǒng)實現(xiàn)

        基于ElasticSearch的分布式全文搜索系統(tǒng)使用3臺Linux服務器組成集群,服務器硬件配置如表2所示。

        表2 集群硬件配置

        集群的操作系統(tǒng)為Red Hat Enterprise Linux Server release 6.2,ElasticSearch軟件版本為5.3.0。

        2.3.1 數(shù)據(jù)存儲實現(xiàn)

        ElasticSearch在建立倒排索引表時,需要先把文檔內容存儲進庫中,然后更新倒排索引表?;贓lasticSearch建立數(shù)據(jù)索引的代碼如下:

        ∥ 1.上傳文檔建立索引

        IndexResponse response=client.prepareIndex(index,type,id).setSource(json).get();

        ∥ 2.對所有倒排索引中的特定字段搜索關鍵字

        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("key","value");

        SearchRequestBuilder searchRequestBuilder = client.prepareSearch().setQuery(matchQueryBuilder).setSize(length);

        SearchResponse searchKey = searchRequestBuilder.get();

        ∥ 3. 得到的SearchResponse類型可以通過迭代器打印結果

        SearchHits hits = searchKey.getHits();

        Iterator iterator = hits.iterator();

        while (iterator.hasNext()) {

        SearchHit next = iterator.next();

        System.out.println(next.getSourceAsString());

        System.out.println(next.score());

        }

        ∥ 4.使用結束后關閉client資源

        client.close();

        2.3.2 運行實例

        全文搜索系統(tǒng)[14-15]在執(zhí)行搜索時,會在所有倒排索引表中查找符合條件的表,再根據(jù)對應詞條的id提取出文檔內容,并對文檔中關鍵詞進行高亮標注,圖3為全文搜索系統(tǒng)的實現(xiàn)實例。

        圖3 全文搜索系統(tǒng)界面

        2.3.3 性能測試

        為了測試系統(tǒng)響應并發(fā)查詢請求的性能,通過改變查詢操作線程數(shù)來得到對應的系統(tǒng)響應時間,從而繪制了變化曲線圖(每點響應時間均為重復測試后求得的平均數(shù))。

        圖4 并發(fā)查詢響應

        由圖4可知,本系統(tǒng)的并發(fā)性能完全符合要求,在高并發(fā)的查詢操作中,響應時間呈穩(wěn)定曲線。

        3 結束語

        本文基于ElasticSearch對分布式全文搜索系統(tǒng)進行設計和實現(xiàn),對系統(tǒng)的數(shù)據(jù)接入、倒排索引及實現(xiàn)方案進行了深入研究,提出了倒排索引的性能模型,模型表明了ElaticSearch使用的倒排索引數(shù)據(jù)結構對分布式搜索系統(tǒng)的性能有一定優(yōu)化作用,并通過多線程查詢測試驗證,具有可行性。系統(tǒng)具有高并發(fā)高穩(wěn)定性的特點,彌補了傳統(tǒng)集中式搜索引擎的瓶頸。但由于條件限制,本文研究內容屬于實驗性研究,未能在超大規(guī)模集群中進行完整的測試,因此在后續(xù)應用中需要進一步完善。

        猜你喜歡
        全文檢索詞條搜索引擎
        2016年4月中國直銷網(wǎng)絡熱門詞條榜
        2016年3月中國直銷網(wǎng)絡熱門詞條榜
        Oracle數(shù)據(jù)庫全文檢索性能研究
        2016年9月中國直銷網(wǎng)絡熱門詞條榜
        網(wǎng)絡搜索引擎亟待規(guī)范
        大數(shù)據(jù)相關詞條
        基于Nutch的醫(yī)療搜索引擎的研究與開發(fā)
        基于KySou的全文檢索系統(tǒng)的分析與優(yōu)化
        廣告主與搜索引擎的雙向博弈分析
        特色數(shù)據(jù)庫全文檢索系統(tǒng)的設計
        国产午夜精品福利久久| 成年女人vr免费视频| 欧美最猛性xxxxx免费| 国产亚洲欧美在线| 国产一区二区高清不卡在线| 亚洲不卡在线免费视频| 天天摸夜夜摸夜夜狠狠摸| 精品无码国产污污污免费网站| 狠狠躁夜夜躁人人爽天天不卡 | 色伊人国产高清在线| 淫秽在线中国国产视频| 欲香欲色天天天综合和网| 亚洲国产美女精品久久久| 国产99页| 亚洲中文乱码在线观看| 日韩网红少妇无码视频香港| 中文字幕乱码人妻一区二区三区| аⅴ天堂一区视频在线观看| aa日韩免费精品视频一| 97se亚洲国产综合自在线观看| 广东少妇大战黑人34厘米视频| 麻豆AV无码久久精品蜜桃久久| 麻婆视频在线免费观看| 亚洲日韩av一区二区三区中文| 久久麻豆精品国产99国产精| 亚洲av色在线观看网站| 亚洲视频高清一区二区| 老熟女重囗味hdxx70星空 | 熟女丝袜美腿亚洲一区二区三区| 国产av精品一区二区三区久久| 男女爽爽无遮挡午夜视频| 国内久久婷婷精品人双人| 偷拍熟女露出喷水在线91| 超碰人人超碰人人| 97久久久久人妻精品专区| 在线观看免费人成视频国产| 国产精品内射久久一级二| 亚洲男人第一无码av网站| 久久精品成人亚洲另类欧美| 久久热免费最新精品视频网站| 国产又a又黄又潮娇喘视频|