Zoie:基於Lucene實時的搜尋引擎系統
阿新 • • 發佈:2019-02-16
<!-- 一個DataProvider的例項: FileDataProvider遞迴的訪問一個指定的路徑,將得到的檔案構造成索引請求提供給DataConsumer。 在本例中,此生產者需要通過jmx進行手動啟動。 --> <bean id="dataprovider" class="proj.zoie.impl.indexing.FileDataProvider"> <constructor-arg value="file:${source.directory}"/> <property name="dataConsumer"ref="indexingSystem"/> </bean> <!-- 一個IndexableInterpreter的例項: 在本例中,FileIndexableInterpreter將一個文字檔案轉換成為一個Lucene的Document物件。 從上面的介紹中我們知道,DataProvider作為一個生產者生產了DataEvent物件供消費者DataConsumer進行消費, 然而由於Zoie最終是基於Lucene的,Lucene是不能夠索引DataEvent物件的, 這就需要有人負責將DataEvent轉換成為Lucene的Document物件,根據應用的需要控制新增那些Field, 新增什麼樣的Field等,此工作由翻譯器Interpreter完成。--> <bean id="fileInterpreter" class="proj.zoie.impl.indexing.FileIndexableInterpreter"/> <!-- 一個IndexReader的裝飾者: 預設的裝飾者什麼都不做,將原IndexReader返回。 注意這裡使用的是一個重要的設計模式,裝飾者模式。 被包裝的IndexReader是直接開啟Lucene索引的IndexReader,IndexReaderFactory在得到這些IndexReader後, 都會經過此類封裝一下,再返回給使用者。基本的Lucene的IndexReader開啟,會載入和初始化一些基本的東西, 然而有時候,使用者需要在IndexReader開啟的時候,同時載入一些自己的東西,此類給了使用者這樣一個機會, 使用者只要實現自己的裝飾者就可以了。在和Zoie同一個專案Bobo(實現Facet搜尋,使用過Solr的同學可能會比較熟悉)中, 實現了BoboIndexReaderDecorator,其作用就是在IndexReader開啟的時候,將Facet資訊載入到記憶體中形成某種資料結構, 從而在收集Facet的時候快速的使用。--> <bean id="idxDecorator" class="proj.zoie.impl.indexing.DefaultIndexReaderDecorator"/> <!-- 一個ZoieSystem的宣告,在上面的DataProvider的宣告中,其是作為一個DataConsumer傳入的。 --> <bean id="indexingSystem" class="proj.zoie.impl.indexing.ZoieSystem" init-method="start" destroy-method="shutdown"> <!-- disk index directory 索引資料夾--> <constructor-arg index="0" value="file:${index.directory}"/> <!-- sets the interpreter 設定翻譯器--> <constructor-arg index="1" ref="fileInterpreter"/> <!-- sets the decorator 設定裝飾器--> <constructor-arg index="2"> <ref bean="idxDecorator"/> </constructor-arg> <!-- set the Analyzer, if null is passed, Lucene's StandardAnalyzer is used 設定分詞器,如果為null,則使用預設的Lucene的StandardAnalyzer --> <constructor-arg index="3"> <null/> </constructor-arg> <!-- sets the Similarity, if null is passed, Lucene's DefaultSimilarity is used 設定相似性評分器,如果為null,則使用Lucene預設的DefaultSimilarity --> <constructor-arg index="4"> <null/> </constructor-arg> <!-- the following parameters indicate how often to triggered batched indexing, whichever the first of the following two event happens will triggered indexing 下面的兩個引數表示觸發批量索引的頻率,任意一個滿足條件則觸發索引。 --> <!-- Batch size: how many items to put on the queue before indexing is triggered 批量大小:即佇列中放入多少項方才觸發索引 --> <constructor-arg index="5" value="1000"/> <!-- Batch delay, how long to wait before indxing is triggered 批量延時:即等待多長時間方才觸發索引 --> <constructor-arg index="6" value="300000"/> <!-- flag turning on/off real time indexing 是否開啟實時索引的標誌位 --> <constructor-arg index="7" value="true"/> </bean> <!-- a search service 一個搜尋服務 --> <bean id="mySearchService" class="com.mycompany.search.SearchService"> <!-- ZoieSystem作為IndexReaderFactory向搜尋服務提供IndexReader列表,使其可以構造Searcher。 --> <constructor-arg ref="indexingSystem"/> </bean>