lucene in action筆記之二搜尋基礎

2021-08-29 12:53:49 字數 1585 閱讀 8405

一、簡單的搜尋程式

主要搜尋的類:1)indexsearcher搜尋操作入口,所有的搜尋操作都是通過indexsearcher例項使用乙個過載的search方法來實現。        2)query及其子類具體的query子類為每一種特定型別的查詢進行了邏輯上的封裝。query例項被傳遞到indexsearch的search方法中               3)queryparser將使用者輸入的(並且可讀的)查詢表示式處理為乙個具體的query物件             4)hits提供對搜尋結果的訪問。hits物件由search方法返回

使用queryparser解析查詢表示式: 1)queryparser是程式的搜尋部分中唯一需要使用分析器的類。 2)如果解析不成功會丟擲parseexception,程式應該能有效處理。  

使用indexsearcher    1)推薦通過directory物件構造indexsearcher例項     2)fsdirectory.getdirectory(indexdir,  false) 的最後乙個引數false表示我們希望開啟的是乙個已經存在的索引而非構造乙個新的索引。    3)注意:indexsearcher例項只搜尋在他被例項化時已存在的索引。如果製作索引和搜尋併發進行,那麼最新你索引的文件對搜尋來說是不可見的。

建議不要呼叫hits類的doc(n)、id(n)和score(n)方法。因為這些方法需要在文件還沒有被放入快取之前就將器從索引中讀取出來。

二、lucene評分機制

explanation物件的內部包含了所有關於評分計算中各個因子的細節資訊。

三、query物件

queryparser類中的靜態方法parse(string query, string field, analyzer analyzer)內部運作:該靜態方法在函式內部傳建了乙個queryparser例項,並呼叫了該例項的parse(string query)方法。

tempquery

public void testterm() throws exception2)tempquery類在根據關鍵字(即通過field.keyword()索引過的關鍵字)查詢文件時顯得特別有用。    3)如果單個單詞作為查詢表示式,queryparse的parse()函式將返回乙個termquery物件。這個單詞就相當於乙個單獨的項。

rangequeryrangequery query = new rangequery(begin, end, true);

//begin、end均為項term

//true 指明搜尋邊界包含在搜尋範圍之內,反之為false

indexsearcher searcher = new indexsearcher(directory);

queryparser可用[起始 to 終止]或表示式來構造。前者邊界包含在搜尋範圍,後者反之。

prefixquery

booleanquery

phrasequery

wildcardquery

fuzzyquery

四、解析查詢表示式 queryparser

lucene in action 閱讀筆記 一

lucene 是乙個高效能的資訊檢索鏈結庫。能夠新增索引和搜尋的功能到你的應用程式中。lucene 核心類index 1 indexwriter 建立乙個索引,並在索引中新增文件,但不是真的去讀或者去搜尋這個物件 2 directory 是乙個抽象類,描述索引物件的位置。fsdirectory 在檔...

C Primer Chapter One學習筆記

筆記 1.流 從io裝置上讀入或寫出的字串行,用來說明字元隨時間順序生成或消耗。2.輸入輸出符可連用原因 operator 或operator 返回stream物件。3.要測試程式那個語句出錯,使用cout 4.新建乙個內建型別,如int i 0 最好先初始化,不然用到的時候沒初始化會產生奇怪的錯誤...

BroadcastReceiver學習筆記

需要注意 的是,不要在 onreceive 方法中新增過多的邏輯或者進行任何的耗時操作,因為在廣播接收 器中是不允許開啟執行緒的,當 onreceive 方法執行了較長時間而沒有結束時,程式就會報錯。有序broadcast,sendorderedbroadcast intent,null abort...