锁定老帖子 主题:Lucene 3.0 原理与代码分析
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-02-25
对了楼主,
Lucene in action 第二版最后一章有一个关于LUCENE的项目,但是我找到了很版本的PDF的这本书,最后一章都删除了,楼主你能找到不? |
|
返回顶楼 | |
发表时间:2010-02-25
Document doc = new Document(); //创建Field对象,并放入doc对象中 doc.add(new Field("filename", "Java编程和Java企业应用 Lucene 3.0 原理与代码分析", Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("indexDate",DateTools.dateToString(new Date(), DateTools.Resolution.DAY),Field.Store.YES,Field.Index.NOT_ANALYZED)); //写入IndexWriter indexWriter.addDocument(doc); 当addDocument到indexWriter之后,怎么看分词的情况? 比如说: Java/编程/和/Java/企业/应用/Lucene 3.0 /原理/与/代码/分析 /代码分析/企业应用 |
|
返回顶楼 | |
发表时间:2010-02-26
langhua9527 写道 Document doc = new Document(); //创建Field对象,并放入doc对象中 doc.add(new Field("filename", "Java编程和Java企业应用 Lucene 3.0 原理与代码分析", Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("indexDate",DateTools.dateToString(new Date(), DateTools.Resolution.DAY),Field.Store.YES,Field.Index.NOT_ANALYZED)); //写入IndexWriter indexWriter.addDocument(doc); 当addDocument到indexWriter之后,怎么看分词的情况? 比如说: Java/编程/和/Java/企业/应用/Lucene 3.0 /原理/与/代码/分析 /代码分析/企业应用 您好,有关分词我想到得有以下几种方法: 1. 有个工具luke(http://www.getopt.org/luke/),能够查看索引。如果使用的分词器为org.apache.lucene.analysis.cjk.CJKAnalyzer,则打开索引后在Overview里面可以看到所有的Term,如下图,可以看到分词结果为"java 编程 程和 java 企业 业应 应用 lucene 3 0 原理 理与 与代 代码 码分 分析" 然而此种方法的问题是,现在luke仅仅支持到2.9,并不支持3.0的索引,因而要想看到分词结果,必须用2.9建立索引,用luke打开查看。 由于分词结果仅仅和分词器有关系,如果分词器在两个版本中没有太大变化,索引从2.9中看到的分词结果基本能够反映3.0中的分词情况。 如果非要看3.0中的分词器的效果,可以将分词器移到2.9的代码中,然后用它建立索引后查看。 2. 如果每次检验分词结果都要重建索引比较麻烦,可以使用luke中search这一栏,在Enter search expression here:输入"Java编程和Java企业应用 Lucene 3.0 原理与代码分析",注意一定要引号引起来,然后再Analyzer to use for query parsing中选择适当的分词器,比如选择org.apache.lucene.analysis.cjk.CJKAnalyzer,点击search,则在Query details里面显示的就是分词结果:filename:"java 编程 程和 java 企业 业应 应用 lucene 3 0 原理 理与 与代 代码 码分 分析" 因为索引阶段和搜索阶段的相同分词器的分词结果是一样的。 3. 如果在代码中查看,可以写如下代码: File indexDir = new File("TestIndexingAnalyzer"); IndexWriter writer = new IndexWriter(FSDirectory.open(indexDir), new CJKAnalyzer(Version.LUCENE_CURRENT), true, IndexWriter.MaxFieldLength.LIMITED); Document doc = new Document(); // 创建Field对象,并放入doc对象中 doc.add(new Field("filename", "Java编程和Java企业应用 Lucene 3.0 原理与代码分析", Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("indexDate", DateTools.dateToString(new Date(), DateTools.Resolution.DAY), Field.Store.YES, Field.Index.NOT_ANALYZED)); // 写入IndexWriter writer.addDocument(doc); writer.close(); IndexReader reader = IndexReader.open(FSDirectory.open(indexDir)); //TermEnum是用来枚举所有分好的Term的 TermEnum tm = reader.terms(); while(tm.next()){ System.out.println(tm.term()); } 结果为: filename:0 filename:3 filename:java filename:lucene filename:与代 filename:业应 filename:代码 filename:企业 filename:分析 filename:原理 filename:应用 filename:理与 filename:码分 filename:程和 filename:编程 indexDate:20100225 也可以看得出分词结果。 |
|
返回顶楼 | |
发表时间:2010-02-26
看了第一篇文章,太棒了,绝对要评为精华的啊,可惜可惜了
|
|
返回顶楼 | |
发表时间:2010-02-26
写的太好了,讲的很明了,楼主辛苦了
|
|
返回顶楼 | |
发表时间:2010-02-26
楼主灰常厚道的说,可以拿去出版了,JE应该效仿一下天涯的煮酒啊
|
|
返回顶楼 | |
发表时间:2010-03-01
对楼主还是挺钦佩的,能静心研究。(先前回复了“钦佩!钦佩!”给扣了30分,挺郁闷,有时本来就没有必要太多废话)
|
|
返回顶楼 | |
发表时间:2010-04-15
呵呵,楼主及时雨,公司正在准备用这个,这篇文章好在给了一个参考。
|
|
返回顶楼 | |
发表时间:2010-04-20
我断断续续看了好几天,今晚上终于把它看完了,顺便理了下思路,楼主加油!!!
|
|
返回顶楼 | |
发表时间:2010-06-09
博主人格了得,乐以分享.学以致用!
|
|
返回顶楼 | |