Lucene的配置及創建索引全文檢索

来源:http://www.cnblogs.com/zhouguanglin/archive/2017/09/05/7482021.html
-Advertisement-
Play Games

Lucene 是一個開放源代碼的全文檢索引擎工具包,但它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語言)。Lucene的目的是為軟體開發人員提供一個簡單易用的工具包,以方便的在目標系統中實現全文檢索的功能,或者是以此為 ...


Lucene


  是一個開放源代碼的全文檢索引擎工具包,但它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語言)。Lucene的目的是為軟體開發人員提供一個簡單易用的工具包,以方便的在目標系統中實現全文檢索的功能,或者是以此為基礎建立起完整的全文檢索引擎。

優點


 

(1)索引文件格式獨立於應用平臺。Lucene定義了一套以8位位元組為基礎的索引文件格式,使得相容系統或者不同平臺的應用能夠共用建立的索引文件。 (2)在傳統全文檢索引擎的倒排索引的基礎上,實現了分塊索引,能夠針對新的文件建立小文件索引,提升索引速度。然後通過與原有索引的合併,達到優化的目的。 (3)優秀的面向對象的系統架構,使得對於Lucene擴展的學習難度降低,方便擴充新功能。 (4)設計了獨立於語言和文件格式的文本分析介面,索引器通過接受Token流完成索引文件的創立,用戶擴展新的語言和文件格式,只需要實現文本分析的介面。 (5)已經預設實現了一套強大的查詢引擎,用戶無需自己編寫代碼即可使系統可獲得強大的查詢能力,Lucene的查詢實現中預設實現了布爾操作、模糊查詢(Fuzzy Search[11])、分組查詢等等。

概念


 

首先大家可以看一下這張圖,已經流傳許久了,在我的理解中的是:   左邊:是各種數據的採集,比如網上,文本,資料庫等,採集到經過Lucene建立索引index 右邊:是用戶通過一些搜索,經過索引,返回結果的一個過程  

 

Lucene配置


 

很簡單導幾個jar包,創建一個索引文件 我用的是最新版本的6.6.0的核心包:lucene-core-6.6.0.jar,可以上官網下載http://lucene.apache.org/,這一個包就夠你測試用了 索引文件為:index,這個文件名可以隨便取,因為裡面內容自動生成,就是一個索引目錄,可以上網下載工具查看,感興趣可以去試試 然而這個jar包:IKAnalyzer6.5.0.jar,是一個analyzer分詞處理的擴展包,支持中文的分詞,這兩個目錄跟src目錄同級   不多說先上代碼: 首先根據上面的那張lucene的概念圖,我們需要先建立一個索引,這裡這些異常我直接拋出去了,其實需要處理的,太懶了
public static void createindex() throws Exception {
        //創建文件目錄    創建在項目目錄下的index中
        Directory dir=FSDirectory.open(FileSystems.getDefault().getPath(System.getProperty("user.dir")+"/index"));
        //分詞處理         是一個抽象類 一種單字分詞,標準的
        Analyzer analyzer=new IKAnalyzer();
        //創建IndexWriterConfig對象
        IndexWriterConfig config=new IndexWriterConfig(analyzer);
        //創建IndexWriter對象
        IndexWriter iWriter=new IndexWriter(dir, config);
        //清除之前的索引
        iWriter.deleteAll();
                //創建文檔對象
        Document doc=new Document();
        //向文檔中添加文本內容欄位,及欄位類型
        doc.add(new Field("fieldname","堅持到底gl博主的博文,轉載請註釋出處", TextField.TYPE_STORED));
        //將文檔添加到indexWriter中,寫入索引文件中
        iWriter.addDocument(doc);
                //關閉寫入    
                iWriter.close();        
}

這樣運行可以看到你的索引index中的內容文件已經創建出來了

索引已經創建,接下來查詢一下試試索引 ,傳入需要查詢的詞

public static void search(String string) throws Exception {
    
        Directory dir=FSDirectory.open(FileSystems.getDefault().getPath(System.getProperty("user.dir")+"/search"));
        //打開索引目錄的
        DirectoryReader dReader=DirectoryReader.open(dir);
        IndexSearcher searcher=new IndexSearcher(dReader);
        //第一個參數 field值 ,第二個參數用戶需要檢索的字元串
        Term t=new Term("fieldname",string);
        //將用戶需要索引的字元串封裝成lucene能識別的內容 
        Query query=new TermQuery(t);
        //查詢,最大的返回值10
        TopDocs top=searcher.search(query, 10);
                //命中數,那個欄位命中,命中的欄位有幾個
        System.out.println("命中數:"+top.totalHits);
               //查詢返回的doc數組
        ScoreDoc[]    sDocs= top.scoreDocs;   
            for (ScoreDoc scoreDoc : sDocs) {
                //輸出命中欄位內容
        System.out.println(searcher.doc(scoreDoc.doc).get(field));
}
}
 

就這樣一個全文檢索的測試就出來了,多去思考總結,擴展出去

再給添加一個代碼有益於理解

    public static void main(String[] args) throws Exception {
        String chString="堅持到底的文章,轉載請註釋出處";
        Analyzer analyzer=new IKAnalyzer();
        TokenStream stream=analyzer.tokenStream("word", chString);
        stream.reset();
        CharTermAttribute cta=stream.addAttribute(CharTermAttribute.class);
        while (stream.incrementToken()) {
            System.out.println(cta.toString());
        }
        stream.close();
    }

顯示如下:

還可以添加這幾個文件,有一點需要註意的是,註意你的編碼格式

第一個:ext.dic 擴展詞典,分詞中那個需要組在一起的,如:分詞處理可能將“堅持到底”四個字分為“堅持”和“到底”,可以在這個文件中直接添加堅持到底,就可以顯示出堅持到底的這個索引

第三個:stopword.dic 擴展停止詞典,分詞中不想出現的,不希望他被分開出現或單獨的,可以往裡面寫,檢索的時候就不會有

第二個:是指定上面兩個擴展詞典的

這些就是最基本掌握的內容,還有很多分詞演算法等類型,需要去擴展

 

         【版本聲明】本文為博主原創文章,轉載請註明出處      
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 _path = $path; 20 $this->_allowType = array( 21 // images 22 'bmp' => 'image/x-ms-bmp', 23 'jpg' => 'image/jpeg', 24 '... ...
  • 1.java.net.Socket;套接字、封裝了TCP通訊協議,使用它可以基於TCP與遠端電腦上的服務端應用程式鏈接併進行通訊。 實例化Socket就是與伺服器端建立連接的過程。這裡需要傳入兩個參數來指定服務端地址信息: 參數1:伺服器端電腦地址 參數2:運行在伺服器電腦上的服務端應用程式打 ...
  • 一、Debug開篇 二、基本用法&快捷鍵 三、變數查看 四、計算表達式 五、智能步入 六、斷點條件設置 七、多線程調試 八、回退斷點 九、中斷Debug 十、附:JRebel激活 ...
  • 需求背景 動態創建的文件下載的時候希望瀏覽器顯示下載進度 動態創建的文件希望能夠分段下載 HTTP斷點續傳報文 要實現HTTP斷點續傳必須要簡單瞭解以下幾個報文。 Accept-Ranges 告訴客戶端(瀏覽器..)伺服器端支持斷點續傳 伺服器端返回 Range 客戶端告訴伺服器端從指定的的位置/範 ...
  • 算是個面試題吧,問題描述是這樣:多個業務訂單,對應一個支付單進行支付,支付時使用了組合支付。那麼沒個訂單分配到的支付方式及金額如何計算。 一共三個支付方式組合A,B,C金額分辨占100,100,80. 一共兩個訂單1訂單金額80,2訂單金額200. 分配後,產生4份訂單和支付方式不同的數據。 畫個圖 ...
  • 最大子數組 描述 筆記 數據 評測 給定一個整數數組,找到一個具有最大和的子數組,返回其最大和。 註意事項 子數組最少包含一個數 您在真實的面試中是否遇到過這個題? Yes 哪家公司問你的這個題? Airbnb Amazon LinkedIn Cryptic Studios Dropbox Appl ...
  • c語言中,對文件的操作是重要的內容。以下代碼實現了文件的建立、讀寫和文件的顯示。 在此基礎上,還以二進位的方式顯示了文件,以此反映文件在電腦中真實的存儲方式。 具體的代碼實現過程如下所示: ...
  • 最小子數組 描述 筆記 數據 評測 給定一個整數數組,找到一個具有最小和的子數組。返回其最小和。 註意事項 子數組最少包含一個數字 您在真實的面試中是否遇到過這個題? Yes 哪家公司問你的這個題? Airbnb Amazon LinkedIn Cryptic Studios Dropbox App ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...