[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库进行读操作
- 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章 引言
- 深度学习如何入门?——知乎
- 文章收录
- 神经系统