注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

程序员小站

J2EE丨Spring | JVM | Scala

 
 
 

日志

 
 

Lucene使用简介  

2013-01-17 16:16:11|  分类: lucene |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Lucene是非常优秀的成熟的开源的免费的纯java语言的全文索引检索工具包,在企业中用的越来越多。

索引建立、搜索、索引是支撑Lucene的三大基石,当然如果想更好的运用Lucene其他的一些知识也是需要的,比如说高亮、文档提取工具(比如TIka)以及Lucene框架(比如Compass)等。

索引的建立就是把要检索的信息通过分词后放入到索引库(Directory)中(索引库会存放在本地的一个文件中,可以通过luke查看),索引库中文档(Document)的增删改操作用IndexWriter 进行,虽然IndexReader 也可以对索引库进行修改,但是极力不推荐这么做!在最新的Lucene4版本中,已经删除了IndexReader对索引库的修改操作,IndexReader之时用来对索引库进行查询操作。IndexWriter的操作包括:增加文档(addDocument)、把文档放入垃圾箱(deleteDocumentsdeleteAll)、清空垃圾箱(forceMergeDeletes)和更新操作(updateDocument)。其中的文档可以包含多个域字段,这些域就是我们用来存储数据的区域,域的主要设置参数就是域名(相当于数据库列名)和域值,还包括域的分词选项和存储选项,对于性能优化,这两个选项也是非常重要的。

建立索引库后就可以对索引库进行搜索,其中有一个重点就是在我们得到一个IndexReader之后如果索引库变化了,我们的IndexReader并不会觉知这些变化,所以建立每次用IndexReader时通过openIfChanged方法从新打开。在搜索时简单的搜索包括:域搜索TermQuery、域范围搜索TermRangeQuery、数字搜索NumericRange、前缀搜索PrefixQuery、通配符搜索WildcardQuery、布尔搜索BooleanQuery、短语搜索PhraseQuery、模糊搜索FuzzyQuery、正则搜索RegexQuery)。而一般我们常用的是功能更强大的QueryParser多域查询MultiFieldQueryParser)。多域搜索可以让我们一次制定多个域而不用手动的切换到不同的域。 QueryParser通过通过我们是输入自动匹配一个简单的搜索进行查询,QueryParser的常用匹配方式有:完全包含("value")、多值查找("field value")、切换域搜索("field :value")、通配符搜索("field :value*")、高级多条件搜索("-field :value1+value2")、范围搜索("field :[value1 TO value2])、字符串完全匹配("\"value1 value2\"")、字符距离搜索("\"value1 value2\"~1")以及模糊搜索("field :value~")。

如果说上面的建立索引以及搜索只是我们的一个工具的话,那么分词器的分词质量则是我们搜索引擎的重中之重,因为他决定了用户搜索的准确度、满意度。除了搜索的速度(由Lucene内部实现算法决定)外,分词的重要程度不言而喻。Lucene包中自己自带了很多不错的英文分词器,如果要对中文分词,则要用到其他的分词器,目前比较常用是是:IKAnalyzermmseg。他们的效率和分词质量都已经非常好,但是为了更好的让它们为我们服务,对它们进行扩展也是灰常重要的,比如添加适合自己的停用词。

以上就是对lucene简单的介绍,如果要想更好的让lucene我们服务,还是很多知识需要研究。抛砖引玉,望大家一起努力!

  评论这张
 
阅读(529)| 评论(3)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017