这几天一直在看有关lucene的资料,在网上查了下,发现好多文章都是重复的,也有将的不错的文章,但大多例子都是基于lucene1.4.3的。本人刚接触lucene,在此一点小小的心得和疑问。请看下面:
lucene的基本特性可以参考:
<a href= "http://www.yyhweb.com/Article.htm?cId=2&fId=3&aId=28 "> 初识lucene </a>
<a href= "http://www.yyhweb.com/Article.htm?cId=2&fId=3&aId=46 "> Lucene基本使用介绍 </a>
网上大家对中文分词插件IK_CAnalyzer的评价不错,目前IK_CAnalyzer的最新版本是1.4,是在lucene2.0API的基础上开发的。本人下面的例子就是结合lucene2.0和IK_CAnalyzer使用的。
介绍:
例子是对lucene的简单使用,对“文章”的三个基本属性Id,title,content的索引和搜索。
通过ArticleBiz.getForumArt( "10 ");取得一个文章列表。
从此list里取得各文章属性建立索引。
public class IndexAndSearch{
public static void main(String[] args) throws IOException, ParseException{
//RAMDirectory directory = new RAMDirectory(); // 将索引保存到内存中
String directory = "C:/index "; // 将索引保存到硬盘中
if(!new File(directory).exists())
new File(directory).mkdirs();
// IK_CAnalyzer的分词器
MIK_CAnalyzer mkAnalyzer = new MIK_CAnalyzer();
try{
// 取得文章列表,这部分省略了其与数据库的具体操作。
List alist = ArticleBiz.getForumArt( "10 ");
// 生成一个IndexWriter,其作用是把每个Document 对象加到索引中来。
IndexWriter writer = new IndexWriter(directory,mkAnalyzer,true);
long s = System.currentTimeMillis();// 计算开始时间
// 定义Document用来储存索引记录
Document doc = null;
// 循环从文章列表里对每一篇文章进行索引并将其结果加到以上的writer 里
for(int i=0;i <alist.size();i++){
doc = new Document();
Article curArt = (Article) alist.get(i);
System.out.println( "index of : "+i+ " the id is: "+curArt.getId()+ " the title : "+curArt.getTitle());
// 对文章Id,title,content索引,id:存储不分词。title:存储且分词。content:不存储但分词。
doc.add(new Field( "id ",String.valueOf(curArt.getId()),Field.Store.YES,Field.Index.UN_TOKENIZED));