本發(fā)明涉及搜索引擎技術(shù)領(lǐng)域,尤其涉及一種面向?qū)崟r大數(shù)據(jù)搜索引擎的實現(xiàn)方法。
背景技術(shù):
很多網(wǎng)絡(luò)應(yīng)用程序都涉及到海量數(shù)據(jù)的分析處理,一般格式化的海量數(shù)據(jù)存儲在數(shù)據(jù)庫,非格式化數(shù)據(jù)以文件形式存儲,或者是以數(shù)據(jù)庫和文件形式混合存儲。當(dāng)數(shù)據(jù)庫和文件系統(tǒng)遇到上TB數(shù)據(jù)甚至更大的數(shù)據(jù)量,其分析處理速度將變得非常慢,響應(yīng)速度不能滿足用戶的需求。
傳統(tǒng)的網(wǎng)絡(luò)應(yīng)用系統(tǒng)架構(gòu),主要有C/S模式(或B/S),S是指Server(服務(wù)器端),B指Browser(瀏覽器端),C指Client(客戶端),兩者之前區(qū)別只在于主要業(yè)務(wù)邏輯是放在客戶端還是放在服務(wù)器端。如圖1所示,以C/S模式為例,客戶端通過UI,與用戶交互產(chǎn)生的數(shù)據(jù)一般會通過網(wǎng)絡(luò)方式提交給服務(wù)器進行業(yè)務(wù)處理,處理后的業(yè)務(wù)數(shù)據(jù)會存儲在數(shù)據(jù)庫或文件系統(tǒng)中,等待二次運用,比如數(shù)據(jù)查詢、統(tǒng)計和數(shù)據(jù)挖掘等操作。該架構(gòu)在大數(shù)據(jù)(通常指TB級的數(shù)據(jù)量)情況下,數(shù)據(jù)的分析處理瓶頸主要集中在數(shù)據(jù)庫和文件系統(tǒng)的I/O,內(nèi)存和CPU處理能力等,會導(dǎo)致系統(tǒng)響應(yīng)太慢甚至無法響應(yīng),而且這種系統(tǒng)通常不具備可擴展性,增加存儲和計算資源并不能提高其性能。
Apache Hadoop分布式計算系統(tǒng)是一個用java語言實現(xiàn)的軟件框架,在由大量計算機組成的集群中運行海量數(shù)據(jù)的分布式計算,它可以讓應(yīng)用程序支持上千個節(jié)點和PB級別的數(shù)據(jù)。其主要解決數(shù)據(jù)量問題,在處理大數(shù)據(jù)量的存儲和簡單計算問題上有優(yōu)勢。適合于海量數(shù)據(jù)文件的批處理任務(wù),不適合實時性要求高的場景,不適合用戶操作,修改數(shù)據(jù)頻繁的場景。
技術(shù)實現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是提供一種面向?qū)崟r大數(shù)據(jù)搜索引擎的實現(xiàn)方法,該方法能夠很好的完成實時流數(shù)據(jù)的全文搜索功能,并和分布式系統(tǒng)共同完成計算任務(wù),充分利用集群的高速運算和存儲,提高數(shù)據(jù)分析處理的響應(yīng)速度。實現(xiàn)了實時大數(shù)據(jù)的可擴展的分析處理,系統(tǒng)產(chǎn)生的數(shù)據(jù)不需要先存儲,可被直接實時處理及被反映到響應(yīng)結(jié)果中。
為解決上述技術(shù)問題,本發(fā)明所采取的技術(shù)方案是:一種面向?qū)崟r大數(shù)據(jù)搜索引擎的實現(xiàn)方法,包括以下實現(xiàn)步驟:
1)基于HTTP和Apache Lucene,構(gòu)建ROSE搜索引擎系統(tǒng);
2)創(chuàng)建ROSE搜索引擎系統(tǒng)的索引,通過對各種格式的文檔信息以及數(shù)據(jù)庫數(shù)據(jù)進行信息抽取,并根據(jù)文件類型選擇不同的文本分析器進行文本分析,創(chuàng)建索引,生成索引數(shù)據(jù)庫;
3)索引創(chuàng)建好后,用戶可以輸入查詢條件對文件信息進行檢索,當(dāng)用戶輸入查詢條件時,首先進行文本分析,然后從索引數(shù)據(jù)庫查詢索引,最后將得到的結(jié)果返回給用戶。
進一步優(yōu)化的技術(shù)方案為所述的步驟2)中創(chuàng)建索引的步驟包括以下步驟:
A、指定創(chuàng)建索引的目錄;
B、創(chuàng)建Directory對象;
C、創(chuàng)建寫索引文件對象IndexWriter;
D、獲取源文件的File數(shù)組以確定索引內(nèi)容;
E、用循環(huán)將每個文件寫入索引,首先創(chuàng)建Document對象和Field對象,分別代表數(shù)據(jù)庫表中的一行數(shù)據(jù)和該行中的列屬性;然后將Field加入到Document中,最后由IndexWriter調(diào)用函數(shù)addDocument將文檔索引寫到索引數(shù)據(jù)庫中;
F、關(guān)閉寫索引對象IndexWriter。
進一步優(yōu)化的技術(shù)方案為所述的步驟2)中檢索的步驟包括以下步驟:
A、創(chuàng)建讀索引對象IndexReader;
B、創(chuàng)建搜索對象IndexSearcher;
C、創(chuàng)建詞法分析對象Analyer;
D、創(chuàng)建語法分析對象QueryParser
E、QueryParser調(diào)用parser進行語法分析,生成查詢語法樹,將其放到Query中;
F、IndexSearcher調(diào)用search方法對查詢語法樹Query進行搜索,得到結(jié)果集TopDocs;
G、根據(jù)TopDocs獲取相應(yīng)的ScoreDoc;
H、根據(jù)ScoreDoc獲取相應(yīng)Document文檔;
I、根據(jù)Document獲取相應(yīng)的Field屬性。
進一步優(yōu)化的技術(shù)方案為ROSE搜索引擎系統(tǒng)設(shè)置有標(biāo)準(zhǔn)的http接口來實現(xiàn)對數(shù)據(jù)的索引的增加、刪除、修改、查詢。
進一步優(yōu)化的技術(shù)方案為ROSE搜索引擎系統(tǒng)可通過Zookeeper快速建立起集群,并根據(jù)當(dāng)前的索引記錄的ID值做hash操作后根據(jù)服務(wù)器中維護的集群的相關(guān)狀態(tài)去查找hash值在哪一個Range中,找到對應(yīng)的shard;在該shard中l(wèi)eader中建立索引,直到Leader節(jié)點更新結(jié)束完成,最后將版本號和文檔轉(zhuǎn)發(fā)給同屬一個Shard的replicas節(jié)點。
采用上述技術(shù)方案所產(chǎn)生的有益效果在于:本發(fā)明有以下優(yōu)點:
(1)支持實時流數(shù)據(jù)的全文檢索
ROSE主要基于HTTP和Apache Lucene實現(xiàn),能夠很好的完成實時流數(shù)據(jù)的全文搜索功能;能夠查詢到剛剛數(shù)據(jù)庫中改動的字段,如對數(shù)據(jù)庫中的某一個表實現(xiàn)insert一條或者多條數(shù)據(jù),他能夠?qū)崟r的對剛才增加插入的數(shù)據(jù)創(chuàng)建索引。而且其允許通過唯一鍵查找任何文檔的最新版本數(shù)據(jù),并且不需要重新打開searcher。
(2)支持基于實時流數(shù)據(jù)的分析處理
ROSE不單單支持實時流數(shù)據(jù)的全文搜索,而且還支持對搜索到的數(shù)據(jù)進行分析處理。ROSE能夠在搜索關(guān)鍵字的同時能夠按照Facet的字段進行分組并統(tǒng)計,它并不會修改查詢結(jié)果信息,只是在查詢結(jié)果上根據(jù)分類添加count信息,然后用戶根據(jù)count信息做進一步的查詢。
(3)可擴展的用于全文檢索的插件體系
ROSE能夠集成一些插件來實現(xiàn)一些特定的功能,包括KAnalyzer,mmseg4j來實現(xiàn)全文搜索的中文分詞功能,也可集成solr_pagerlai來實現(xiàn)全文搜索之后的搜素分頁功能??蓴U展的插件體系使得ROSE更加快速和便捷。
附圖說明
圖1是傳統(tǒng)的網(wǎng)絡(luò)應(yīng)用系統(tǒng)架構(gòu)圖;
圖2是本發(fā)明ROSE搜索引擎系統(tǒng)結(jié)構(gòu)圖;
圖3是本發(fā)明ROSE搜索引擎系統(tǒng)的體系架構(gòu)圖;
圖4是本發(fā)明索引創(chuàng)建和搜索過程圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
如圖2所示,本發(fā)明公開了一種面向?qū)崟r大數(shù)據(jù)搜索引擎的實現(xiàn)方法,包括以下實現(xiàn)步驟:
1)基于HTTP和Apache Lucene,構(gòu)建ROSE(Real-time OceanData Search Engine)搜索引擎系統(tǒng);
2)創(chuàng)建ROSE搜索引擎系統(tǒng)的索引,通過對各種格式的文檔信息以及數(shù)據(jù)庫數(shù)據(jù)進行信息抽取,并根據(jù)文件類型選擇不同的文本分析器進行文本分析,創(chuàng)建索引,生成索引數(shù)據(jù)庫;
3)索引創(chuàng)建好后,用戶可以輸入查詢條件對文件信息進行檢索,當(dāng)用戶輸入查詢條件時,首先進行文本分析,然后從索引數(shù)據(jù)庫查詢索引,最后將得到的結(jié)果返回給用戶。
創(chuàng)建索引的步驟包括以下步驟:(參考圖3和圖4)
A、指定創(chuàng)建索引的目錄;
B、創(chuàng)建Directory對象;
C、創(chuàng)建寫索引文件對象IndexWriter;
D、獲取源文件的File數(shù)組以確定索引內(nèi)容;
E、用循環(huán)將每個文件寫入索引,首先創(chuàng)建Document對象和Field對象,分別代表數(shù)據(jù)庫表中的一行數(shù)據(jù)和該行中的列屬性;然后將Field加入到Document中,最后由IndexWriter調(diào)用函數(shù)addDocument將文檔索引寫到索引數(shù)據(jù)庫中;
F、關(guān)閉寫索引對象IndexWriter。
索引創(chuàng)建好后,用戶就可以輸入查詢條件對索引文件進行檢索,其檢索的步驟包括以下步驟:
A、創(chuàng)建讀索引對象IndexReader;
B、創(chuàng)建搜索對象IndexSearcher;
C、創(chuàng)建詞法分析對象Analyer;
D、創(chuàng)建語法分析對象QueryParser
E、QueryParser調(diào)用parser進行語法分析,生成查詢語法樹,將其放到Query中;
F、IndexSearcher調(diào)用search方法對查詢語法樹Query進行搜索,得到結(jié)果集TopDocs;
G、根據(jù)TopDocs獲取相應(yīng)的ScoreDoc;
H、根據(jù)ScoreDoc獲取相應(yīng)Document文檔;
I、根據(jù)Document獲取相應(yīng)的Field屬性。
關(guān)于Lucene系統(tǒng)為共由7個包模塊組成,分別是:analysis,document,index,queryParser,search,store,util。各個包模塊之間相互配合工作,每個包各自又有特定的功能:analysis模塊主要負(fù)責(zé)語言處理以及詞法分析;其中包括Lucene一些默認(rèn)自帶的分詞器,如過濾掉“停止詞”的StopAnalyzer類和常用的StandardAnalyzer類,WhitespaceAnalyzer按空格字符分詞的類等;document模塊主要用于管理文檔結(jié)構(gòu),相當(dāng)于關(guān)系數(shù)據(jù)庫的表結(jié)構(gòu),一個document中可以包含多個信息“域”(Field),類似于關(guān)系表中對應(yīng)的列;index模塊主要負(fù)責(zé)索引管理,包括創(chuàng)建索引、刪除索引、讀寫索引、合并和優(yōu)化索引等;store模塊主要負(fù)責(zé)讀寫和存儲索引;queryParser主要負(fù)責(zé)語法分析,用于解析和執(zhí)行查詢語句;search模塊主要負(fù)責(zé)檢索管理,根據(jù)條件從索引文件中搜索出結(jié)果集;util模塊是工具包,是一些常用工具類和方法的集合。
進一步優(yōu)化的實施例為ROSE搜索引擎系統(tǒng)設(shè)置有標(biāo)準(zhǔn)的http接口來實現(xiàn)對數(shù)據(jù)的索引的增加、刪除、修改、查詢。在ROSE中,用戶通過向部署在servlet服務(wù)器中的ROSE Web應(yīng)用程序發(fā)送HTTP請求來啟動索引和搜索;ROSE接受請求,確定要使用的適當(dāng)ROSE RequestHandler,然后處理請求。通過HTTP以同樣的方式返回響應(yīng),默認(rèn)配置返回ROSE的標(biāo)準(zhǔn)XML響應(yīng),也可以配置ROSE的備用響應(yīng)格式。
可以向ROSE索引servlet傳遞四個不同的索引請求:
add/update允許向ROSE添加文檔或更新文檔,直到提交后才能搜索到這些添加和更新。
commit告訴ROSE,應(yīng)該使上次提交以來所做的所有更改都可以搜索到。
optimize重構(gòu)Lucene的文件以改進搜索性能,索引完成后執(zhí)行一下優(yōu)化通常比較好。如果更新比較頻繁,則應(yīng)該在使用率較低的時候安排優(yōu)化。一個索引無需優(yōu)化也可以正常地運行。優(yōu)化是一個耗時較多的過程。
delete可以通過id或查詢來指定,按id刪除將刪除具有指定id的文檔;按查詢刪除將刪除查詢返回的所有文檔。
要實現(xiàn)添加文檔索引則只需要調(diào)用搜索接口以HTTP POST的方式提交XML報文。
進一步優(yōu)化的實施例為ROSE搜索引擎系統(tǒng)可通過Zookeeper快速建立起集群,并根據(jù)當(dāng)前的索引記錄的ID值做hash操作后根據(jù)服務(wù)器中維護的集群的相關(guān)狀態(tài)去查找hash值在哪一個Range中,找到對應(yīng)的shard;在該shard中l(wèi)eader中建立索引,直到Leader節(jié)點更新結(jié)束完成,最后將版本號和文檔轉(zhuǎn)發(fā)給同屬一個Shard的replicas節(jié)點。
本發(fā)明同樣適用于已投入實際運營的系統(tǒng),僅需對應(yīng)用程序在源代碼上做微小的修改,系統(tǒng)部署上要根據(jù)歷史數(shù)據(jù)量增加1臺索引服務(wù)器或一個索引服務(wù)器集群。
ROSE搜索引擎系統(tǒng)應(yīng)用的主要流程包括:
(1)用戶通過客戶端向服務(wù)器端發(fā)出add請求,并提交相應(yīng)的文檔;
(2)服務(wù)器端應(yīng)用程序接收客戶提交的文檔,把文件存儲在文件系統(tǒng)中并向數(shù)據(jù)庫更新相關(guān)記錄;
(3)索引服務(wù)器調(diào)用分析處理應(yīng)用程序?qū)τ脩籼峤坏臄?shù)據(jù)進行分析處理,并將處理后的數(shù)據(jù)進行索引;
(4)用戶通過客戶端向服務(wù)器端發(fā)出Query、Update或者Delete請求;
(5)服務(wù)器端應(yīng)用程序接收到客戶請求后,直接查詢索引服務(wù)器,由索引服務(wù)器直接返回所查詢數(shù)據(jù)或者執(zhí)行update、delete操作。
本發(fā)明優(yōu)點為:
1)實時流數(shù)據(jù)的全文搜索和分布式計算功能
ROSE主要基于HTTP和Apache Lucene實現(xiàn),能夠很好的完成實時流數(shù)據(jù)的全文搜索功能。ROSE是一個獨立的企業(yè)級搜索應(yīng)用服務(wù)器。原理是文檔通過Http利用XML加到一個搜索集合中;查詢該集合也是通過http收到一個XML/JSON響應(yīng)來實現(xiàn)。它的主要特性包括:高效、靈活的緩存功能,垂直搜索功能,高亮顯示搜索結(jié)果,通過索引復(fù)制來提高可用性,提供一套強大Data Schema來定義字段,類型和設(shè)置文本分析,提供基于Web的管理界面等。
分布式計算功能的核心思想是ROSE由一個分布式系統(tǒng)共同完成計算任務(wù),充分利用集群的威力高速運算和存儲。有著高容錯性的特點,并且設(shè)計用來部署在低廉的(low-cost)硬件上。而且它提供高傳輸率(high throughput)來訪問應(yīng)用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集(large data set)的應(yīng)用程序。
2)可擴展的分布式計算架構(gòu)
ROSE可通過Zookeeper快速建立起集群,并提供了簡單的分片算法,即根據(jù)當(dāng)前的索引記錄的ID值做hash操作,后根據(jù)服務(wù)器中維護的集群的相關(guān)狀態(tài)去查找hash值在哪一個Range中,找到對應(yīng)的shard;在該shard中l(wèi)eader中建立索引,直到Leader節(jié)點更新結(jié)束完成,最后將版本號和文檔轉(zhuǎn)發(fā)給同屬一個Shard的replicas節(jié)點。因此,該架構(gòu)能夠動態(tài)的來進行部署,包括可增加硬件來同時工作,可配置多個服務(wù)器來同時管理數(shù)據(jù)。
3)可擴展的插件體系
實現(xiàn)實時大數(shù)據(jù)的流處理,那么高速訪問數(shù)據(jù)和快速返回結(jié)果數(shù)據(jù)結(jié)果集是一個必須得考慮的問題。而基于HTTP和Apache Lucene實現(xiàn)ROSE的全文搜索能夠擴展其他插件來完成特定的功能。例如IKAnalyzer,mmseg4j,paoding等分詞器實現(xiàn)中文分詞功能,也可集成solr_pager來來實現(xiàn)搜索分頁功能,這一特性使其能夠更快速的對數(shù)據(jù)進行處理和分析。