Lucene3.0.2之IndexWriter之updateDocument无法更新索引之解决方法

很郁闷的搞了好几天,各大搜索引擎都用遍了,还差点对互联网绝望。到最终发现是自己错了。

我用IndexWriter 追加索引(IndexWriter.addDocument),删除索引(IndexWriter.deleteDocuments)都可以实现,但是用IndexWriter.updateDocument 来做索引的更新就一直实现不了。

代码如下:

Document doc = new Document();

doc.add(new Field("title", "搜狐星相-十二生肖", Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.add(new Field("content", "中华人民共和国自己的生命才是最重要的",Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.add(new Field("url", "http://www.sina.com.cn", Field.Store.YES, Field.Index.NOT_ANALYZED));

doc.add(new Field("updatetime", "2011-06-17",Field.Store.YES, Field.Index.NOT_ANALYZED));

// 更新索引使用默认分词器 
writer.updateDocument(new Term("title", "搜狐星相-十二生肖"), doc);       
 //优化
 writer.optimize();
 writer.close();

在做测试的时候我是用txt文本做实验的。我把文件名存放在字段title,文件内容存放在content,这里的url和updatetime是做其他用途的,这里可以不用管它。

上面代码跑完之后,的确是把title为“搜狐星相-十二生肖”的索引删除了,但是并没有把 "中华人民共和国自己的生命才是最重要的","2011-06-17",等内容更新到索引里面去,我用关键字“生命”检索的时候,没有检索到内容。到网上找了很多的资料,都说按照上面的代码写就可以了,但是我就是跑不出来,一度以为网络太无力了。

搞搞搞搞搞了好久,发现把Field.Index.NOT_ANALYZED   改为Field.Index.ANALYZED居然可以了。

即:

Document doc = new Document();

doc.add(new Field("title", "搜狐星相-十二生肖", Field.Store.YES, Field.Index.ANALYZED));
doc.add(new Field("content", "中华人民共和国自己的生命才是最重要的",Field.Store.YES, Field.Index.ANALYZED));
doc.add(new Field("url", "http://www.sina.com.cn", Field.Store.YES, Field.Index.ANALYZED));

doc.add(new Field("updatetime", "2011-06-17",Field.Store.YES, Field.Index.ANALYZED));

// 更新索引使用默认分词器 
writer.updateDocument(new Term("title", "搜狐星相-十二生肖"), doc);       
 //优化
 writer.optimize();
 writer.close();

就ok了。

也就是说在建立索引字段的时候,一定要记住,切记:分析一下。

你可能感兴趣的:(Lucene)