码迷,mamicode.com
首页 > Web开发 > 详细

Lucene的总结

时间:2015-03-31 14:48:32      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

概述

       当今时代是一个网络时代,是一个信息数字化时代,是一个信息大爆炸的时代,在这个时代中,快速的从信息海洋中获取自己想要的信息,已经是每一个人最迫切的需要,当然,我们现在已经有相应的产品(百度,谷歌等)为人们提供了这样的服务,但是,仍然没有办法满足人们的需求,因为百度和谷歌等搜索引擎公司提供的是大众化的公网搜索服务,只能满足于大众群体,而对于公司级的群体是满足不了的,因为公司级的群体,使用的是自己内部的系统,而要想要这样的系统具有像百度/谷歌那样类似的功能时,我们程序员应该通过编写代码来实现。

       lucene是一个框架,编程人员可以使用其jar,快速的开发一个全文索引的功能,而不需要从0开始慢慢的编写。

       使用lucene编写的搜索功能,只能对文本进行搜索(不能对语音、图片和视频进行搜索),并且是关键词的索引(不是语义搜索)


数据库搜索不能替代全文索引吗?

       我们使用的数据库也可以进行相应的搜索功能,像like条件查询,这个能的操作确实可以实现,为什么还要lucene的这样的全文搜索框架呢?

       要想弄懂这个,需要知道两点。第一:被搜索的数据的数量一定非常的多,如果不大的话,根本不需要这个功能;第二:数据库的like等条件搜索,即使创建相应的索引,也是非常消耗资源的,具体大家可以看这篇博客:如何编写高效的SQL查询语句

       lucene的全文索引的优点就是解决了数据库索引消耗资源大的问题,所以,数据库索引不能替代全文索引。


lucene

       lucene通过维护自己的索引库,实现全文索引的功能。lucene对索引库的操作主要有两个,数据写入和数据检索。

      数据写入过程描述。

      数据写入索引时,需要先指定索引库的位置,lucene给我们提供了文件和内存两个位置,以文件位置为例,指定索引库的具体位置在那个文件夹后;然后,需要创建一个分词器,这里使用标准的分词器;有了索引库对象和分词器对象后,我们就可以创建索引库更新操作对象(indexWriter)了,该对象将文本内容保存到索引仓库中;创建document对象,该对象就相当于indexWriter对象操作的对象,这里我们就需要注意,我们需要将文本内容转换为document对象类型,此时需要Field对象,field是document的成员,document相当于表,field相当于字段;最后,通过indexWriter直接操作document就可以了

       数据读取操作。

       创建索引库对象,指定索引库的位置,以便从里面读取数据;创建indexSearcher对象,查询索引库的内容;创建分词器,用于分解搜索的句子;创建QueryParser对象,相当于确定字段;创建Query,相当于确定字段的值;最后使用indexSearcher对象进行查询;TopDoc代表从索引库查询出的结果的一个外观对象;ScoreDoc代表索引库的一条记录。


优化

       lucene仅仅用于文本文件的索引,但是,其存放的却是二进制文件(针对值编码),所以,其内容更新比较麻烦,默认情况下,采用的更新方式是差异版本的迭代,就是更新一个文件的一个内容的时候,之前那个文件保存不变,专门为这个内容再创建一个文件,并更新成新的数据,然后,之后查询的时候,再查询所有文件。

       知道这个过程后,我们就需要解决一个问题,那就是文件过多,导致IO操作过多的现象,lucene也为我们提供了合并文件的操作。

       lucene的文件索引库,使用的是硬盘上的文件,IO操作太频繁,会造成性能下降。使用内存索引库时,一定服务器重新,所有的内容都将丢失。基于此,我们可以使用内存索引库+文件索引库的方式进行索引库的管理。

      在程序上,我们也可以使用相应的优化,就是尽量少的产生没有意义的关键词,因为分词器产生的每个关键词都会存储在索引库的目录库中,如果产生的索引太多,就会影响性能,当然,必须要的关键字我们是一个也不能省的。


总结

       全文索引的实现方式有多种,lucene只是其中的一种具体实现的框架,并且,其功能非常的强大。

Lucene的总结

标签:

原文地址:http://blog.csdn.net/jiben2qingshan/article/details/44775043

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!