Lucene学习笔记(摘抄整理版)

本文档详细对比了 Lucene 1.4.3 和 2.2.0 版本之间的主要变化,包括字段创建方法的调整和索引机制的不同,并提供了具体的代码示例帮助开发者完成版本迁移。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
Lucene In Action阅读笔记之一

  最近在学习Lucene,苦于没有教程,自有一本旧书外加下载了一个 Lucene-2.2.0的源码压缩包。

       按照书里的例子动手实践一下,可总是报错,很烦闷。折腾了一上午才知道源码包里的API已经是2.2,

      书里还是1.4。搜索到的好多也是 Lucene-1.4.3版本的, 于是就准备摘抄整理一份笔记,为的是自己不忘记,同时也希望能给看到这篇文章的朋友一点帮助。

      先从Lucene的1.4.3版和2.2.0版之间的比较开始。

 这是书里的代码,建立索引

	Document doc= new Document();
	doc.add(Field.Text("contents",new FileReader(f))); //<----这里
	doc.add(Field.Keyword("filename",f.getCanonicalPath())); //<----这里

  索引机制在2.0版早就变了,还傻乎乎地跟着书里写,编译必然通不过:
  改成这样:

	Document doc= new Document();
	doc.add(new Field("contents",new FileReader(f)));
	doc.add(new Field("filename",f.getCanonicalPath(),Field.Store.YES,Field.Index.UN_TOKENIZED));
     
   
                         处理方式
字段类型
Stored
Indexed
Tokenized
Keyword
Y
Y
N
UnIndexed
Y
N
N
UnStored
N
Y
Y
Text: String
Y
Y
Y
Text : Reader
N
Y
Y
Lucene 2.0.0版本和1.4.3版本中关于Field方法改动比较

  

 

 

 

 

 

 

 

 

 

 

 

 

 

    

1.4.3 版本中的方法
2.2.0 版本中的方法对应替代方法
用途
Keyword(String name, String value)
Field(String name, String value, Field.Store.YES, Field.Index.UN_TOKENIZED)
存储、索引、不分词 ,用于URI (比如MSN 聊天记录的日期域、比如MP3 文件的文件全路径等等)
UnIndexed(String name, String value)
Field(String name, String value ,Field.Store.YES, Field.Index.NO)
存储、不索引、不分词 ,比如文件的全路径
UnStored(String name, String value)
Field(String name, String value ,Field.Store.NO, Field.Index.TOKENIZED)
不存储、索引、分词 ,比如HTML 的正文、Word 的内容等等,这部分内容是要被索引的,但是由于具体内容通常很大,没有必要再进行存储,可以到时候根据URI 再来挖取。所以,这部分只分词、索引,而不存储。
Text(String name, String value)
Field(String name, String value , Field.Store.YES, Field.Index.TOKENIZED)
存储、索引、分词 ,比如文件的各种属性,比如 MP3 文件的歌手、专辑等等
Text(String name, Reader value)
Field(String name, Reader reader)
不存储、索引、分词

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

更多参考见:
  http://blog.chinaunix.net/u1/42750/showart_350905.html
  这位大侠写得很清楚, 另外请多翻API。

  搜索的程序段,书里的代码:
	Directory fsDir = FSDirectory.getDirectory(indexDir,false);
	IndexSearcher is = new IndexSearcher(fsDir);
		
	Query query = new QueryParser("contents",new StandardAnalyzer()).parse(q);

  API里,FSDirectory.getDirectory早就废了,新方法看起来更懒:

	IndexSearcher is = new IndexSearcher(IndexReader.open(Const.INDEX_DIR));
		
	Query query = new QueryParser("contents",new StandardAnalyzer()).parse(q);

下一篇计划学习Lucene 的工作原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值