[Lucene的原理和應用 ](http://blog.sina.com.cn/s/blog_6fda308501012pht.html)
隨著互聯網的迅速普及與發展,網絡輿論對社會生活的影響力越來越大, 網絡口碑研究也逐漸形成一個新興行業。有效的網絡口碑研究,需要全方位地傾聽網民的聲音。 信息檢索技術的應用,有效地提高了網絡口碑研究的工作效率。
????Lucene?作為當今最知名的開源信息檢索庫,被廣泛應用于各種與全文檢索相關的項目中。 本文將簡要介紹Lucene的基本原理與應用,在此拋磚引玉,希望能有機會與更多的同行進行交流。
**Lucene****是什么**
????Lucene?是一個開源的、成熟的全文索引與信息檢索(IR)庫,采用Java實現。它在系統中的地位,相當于一個主要用來全文檢索的數據庫,與系統其它模塊的關系如下:

**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庫進行讀操作
- 15張圖閱盡人工智能現狀
- LeCun臺大演講:AI最大缺陷是缺乏常識,無監督學習突破困境
- Google首席科學家談Google是怎么做深度學習的
- 為你的深度學習任務挑選性價比最高GPU
- 史上最全面的深度學習硬件指南
- 機器學習
- 普通程序員如何向人工智能靠攏?
- 從機器學習談起
- 普通程序員如何轉向AI方向
- 機器學習6大算法,優勢劣勢全解析
- 除了 Python ,這些語言寫的機器學習項目也很牛(二)
- 五個鮮為人知,但又不可不知的機器學習開源項目
- 機器學習入門算法:從線性模型到神經網絡
- 機器學習常見算法分類匯總
- 最實用的機器學習算法Top5
- NLP
- Lucene的原理和應用
- 理解和使用自然語言處理之終極指南(Python編碼)(經典收藏版12k字,附數據簡化籌技術人員)
- 神經網絡
- 曾經歷過兩次低谷的人工神經網絡,還會迎來下一個低谷么?
- 人工神經網絡——維基
- 深度學習——維基
- A Neural Network in 11 lines of Python (Part 1)
- 深度學習
- 基于深度學習的機器翻譯
- 谷歌研究員2萬字批駁上海交大用深度學習推斷犯罪分子
- 理解這25個概念,你的「深度學習」才算入門!
- Deep Learning(深度學習)學習筆記整理系列
- 概述、背景、人腦視覺機理
- 特征
- Deep Learning
- Deep Learning 訓練
- Deep Learning(中文)
- 第1章 引言
- 深度學習如何入門?——知乎
- 文章收錄
- 神經系統