Lucene索引的建立

Lucene索引的建立

Lucene是完全开源的全文搜索引擎,但不是一个具体的应用App.你需要自己进行一些搭建。但是基本上函数类都是已经提供好了的。最初是Java版的,但由于lucene的高性能,其他语言也都有相应的版本实现。我也是有幸接触到了Lucene.说实话,完全是个小白。完全是自学之中。由于目前找到的书籍中邱哲、符滔滔、王学松版<搭建自己的搜索引擎>读着感觉写的很清楚,可惜也是2010年出版的了。里面的lucene谈到的也是2.0版。目前的是6.0版。我在这里把一些思想和概念在这里写出来,只是希望能在此基础上大家去看那些其他人写的关于最新的lucene教程容易些。个人理解,仅作交流。

1.      搜索引擎之所以检索速度快其中一个因素就是对索引的建立。就好像书籍的目录,可以让我们迅速定位到内容。这里引用一张图说明搜索过程。

从图中可以很清晰的看到一个搜索系统,三个部分:收集数据整理成索引文档,这个过程多是确定你需要检索的信息。比如如果你需要检索图书馆中的书。那么你可能需要把所有检索书时可能用到的信息整理出来包括书名,作者,出版日期,摘要等;建立索引。对收集的索引信息存入数据库后我们需要在其上建立索引;搜索服务。搜索其实就是检索建立好索引库。大型的公司服务器每天还都会自动更新索引,以保证用户检索信息的实时性。这里我们仅谈论索引的建立过程。

2,索引建立

           <pre name="code" class="java">           Document bookdoc=new Document();
           Field bookName=new Field("bookname","钢铁是怎样炼成的",Field.Store.YES,Field.Index.TOKENIZED);
           Field author=new Field("author","匿名",Field.Store.YES,Field.Index.UN_TOKENIZED);
           bookdoc.add(bookName);
           bookdoc.add(author);
           IndexWriter writer=new IndexWriter(INDEX_STORE_PATH,new StandarAnalyzer(),true);
           writer.addDocument(bookdoc);
           writer.close();



上面就是一个索引地建立过程。比如我们要检索一本书的信息。首先我们将获取的需要检索的书名、作者信息存入Field类型对象中,然后将Field对象加入到Document类型中。Indexwriter是一个建立索引的工具,利用它对索引创建。Indexwriter中封装了许多类和方法。当我们将Document类型的数据给它时,就是告诉它,对bookdoc建立索引。

对于Document和Field的关系就好像一张表格中的记录和字段。Document只是表格中的一行,而Field只是一列。


3.参数解释

Filed:前两个参数很容易理解,给字段起个名字,传入值。第三个是表示该字段表示完整存储下来。通常如果在检索时需要完整显示出来信息就选Yes。如果该字段仅是书中一段摘要,我们也可以用Field.Store.No.可以看的出Store为Field中的静态类。而YES为Store类型的值。同理,后面的参数表示该字段需要被分词器切分检索。对于作者名字段通常用户查询时需要完整输入,因此该字段不需要切分。

Document :调用add()方法,将FIeld加入其中。

Indexwriter:第一个为索引建立完成后存放的路径,通常需要捕捉异常即try...catch神马的。第二个参数是指定语言的分词器实例,上文用的是StandarAnalyzer。第三个布尔型值是表式是否将指定路径下的内容清空。通常我们第一次建立索引时置为true,以后如果只是更新索引应该将其置为false。最后关闭writer.这点需要注意:如果不关闭会导致建立的索引数据没有导入磁盘,数据将在缓存中,甚至可能出现锁定情况。下次在该目录下将会发生无法加入文件的情况。

这里给出一篇博客的链接,写的是lucene4.0,有兴趣可以看一下http://www.cnblogs.com/xing901022/p/3933675.html。

最后再度说明,以上内容是lucene2.0之前,如果能帮助大家更轻松地看懂其他IT员的博客,那这篇文章就算值了。文章仅为交流,不当之处,敬请留言指教。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值