<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [Lucene的原理和應用 ](http://blog.sina.com.cn/s/blog_6fda308501012pht.html) 隨著互聯網的迅速普及與發展,網絡輿論對社會生活的影響力越來越大, 網絡口碑研究也逐漸形成一個新興行業。有效的網絡口碑研究,需要全方位地傾聽網民的聲音。 信息檢索技術的應用,有效地提高了網絡口碑研究的工作效率。 ????Lucene?作為當今最知名的開源信息檢索庫,被廣泛應用于各種與全文檢索相關的項目中。 本文將簡要介紹Lucene的基本原理與應用,在此拋磚引玉,希望能有機會與更多的同行進行交流。 **Lucene****是什么** ????Lucene?是一個開源的、成熟的全文索引與信息檢索(IR)庫,采用Java實現。它在系統中的地位,相當于一個主要用來全文檢索的數據庫,與系統其它模塊的關系如下: ![](http://p.blog.csdn.net/images/p_blog_csdn_net/CICTech/388759/o_lucene1.jpg "Lucene的原理和應用") **Lucene****與數據庫的類比** ??Lucene與數據庫有許多相通之處,以下我們做個簡單對比: | | | | | --- | --- | --- | | | **數據庫** | **Luecene** | | 基本概念| 列/字段| Field | | |行/記錄 | Document | | 基本操作 | 查詢(SELECT)| Searcher| || 添加(INSERT) | IndexWriter. addDocument | || 刪除(DELETE)| IndexReader.delete | | |修改(UPDATE)| 不支持(可刪除后重新添加)| **Lucene****與倒排索引****(Inverted index)** ??我想很多人在用數據庫時,都遇到過這種類似的情況:查找含‘奧運會’這個詞的數據, 一般都用?LIKE '%奧運會%'?作為條件的SQL語句進行。 這種解決方法,在數據量很大時,存在嚴重的性能問題。因為一般的數據庫索引,對這種查詢沒有任何幫助。?Lucene作為主要應用于全文檢索領域的庫,引入了一種倒排索引的技術。 ●?相關概念 ?????Term = Field.name + Token.text ?????Token?分詞后的最小單位,如:2008年、奧運會、將、在、北京、舉行 ?????Document?每個Document有個唯一的內部編號ID(int類型),重建索引時ID可能變化 ●?倒排索引文件格式(示意圖) ?????Term1 DocID1 DocID2 DocID3 … ?????Term2 DocID1 DocID2 DocID3 … ?????… … ??從以上格式中不難看出,利用這種索引文件,可以迅速定位到包含‘奧運會’這個詞的所有文章。 **中文分詞與信息檢索模型** ????在上面的索引格式中可以看到,在建索引前,需要將一句話拆分為一個個詞,這里就要用到中文分詞技術。 常見中文分詞算法:正向最大匹配法、逆向最大匹配法、基于統計的分詞方法; ?需要說明的是:Lucene僅提供了分詞接口(沒有中文分詞實現),因此一般還有用到另外的第三方中文分詞庫。? ????當檢索到含‘奧運會’這個詞的文章共有1萬篇時,哪些應該排在最前面呢?這就涉及到Lucene的評分機制,默認Lucene評分采用的是信息檢索中的向量空間模型理論。 ????關于中文分詞和信息檢索模型,這是很大的一個研究課題。感興趣的朋友,可以到網上搜索相關文章進行深入了解; **使用****lucene****的常見問題與建議** ●?中文分詞庫:?網上可用的免費中文分詞庫有?IKAnalyzer(免費但不開源)、Stanford(開源但需自行封裝lucene接口) ●?組合查詢條件:通過使用QueryParser類,可以支持AND、OR等多種組合條件 ●?結果排序: lucene默認按評分排序,通過結合Sort與SortField類,可指定多個排序字段與升降序,排序字段的索引類型必須為UN_TOKENIZED ●?分布式查詢:?通過lucene提供的RemoteSearchable類,可以實現分布式查詢 ●?并行查詢:?當分布式有多個節點時,可以通過ParallelMultiSearcher進行并行,以提高檢索性能 ●?分詞與查詢:?當索引中以‘奧運會’作為一個詞時,通過‘奧運’是無法檢索到相應結果的。這個問題可以通過修改檢索條件或分詞時按較小粒度進行處理 ●?數字與日期:?因lucene索引庫一律按String類型處理,因此數字日期應補0,使能夠正確按字符串比較排序 ●?字段索引類型:email日期等無需分詞的字段,索引類型應選擇UN_TOKENIZED ●?線程安全性:?應保證同時只有一個線程對lucene庫進行寫操作,可以有多個線程對lucene庫進行讀操作
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看