lucene 最基本入门。
刚刚接触lucene 写个最简单程序。记录一下。
?
建立索引:?@Test
public void firstIndexer() throws Exception{//打开一个directory 其中 FSDirectory是个工具类,它会根据操作系统返回合适的Directory类型。生产环境要根据实际情况进行选择。Directory d = FSDirectory.open(new File(INDEX_DIR));//使用IndexWriterConfig创建indexWriter ,conf 中可以设置参数。以优化性能。IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_34,new StandardAnalyzer(Version.LUCENE_34));IndexWriter indexWriter = new IndexWriter(d, conf);//数据文件 我用的是一个目录下的所有文件。文件全部是都是HTMLFile dataFile = new File(DATA_DIR);File[] files = dataFile.listFiles();for (int i = 0; i < files.length; i++) {Document doc = new Document();File f = files[i];//使用文件产见FIELD 该接口分析正文,不存存储正文信息。 注意只有小信息如标题 文件名等适合存储到索引。doc.add(new Field("contents",new FileReader(f)));//有变化的地方 //分析 并且保存。doc.add(new Field("filename",f.getCanonicalPath(),Field.Store.YES, Field.Index.ANALYZED));//有变化的地方 indexWriter.addDocument(doc);}//优化 提交。indexWriter.optimize();indexWriter.close();}建立索引后会在你indexPath中看到
?

?
有索引了 ,那就查询吧!!?
@Testpublic void search() throws Exception {//查询基本类 search 有几种 ,但是4.0貌似要将所有的search都集中到indexSearcher//现在的indexsearcher 的构造方法很灵活,可以使用reader 也可是用多线程。并发多个查询多个索引。IndexSearcher seacher = new IndexSearcher(FSDirectory.open(new File(INDEX_DIR)));//lucene提供的优化方式 。支持一些逻辑查询 。但是最终转换出来的一般BOOLEANQUERY。如果过于复杂反回影响查询效果。建议根据业自己写booleanqueryQueryParser qp = new QueryParser(Version.LUCENE_34,"contents",new StandardAnalyzer(Version.LUCENE_34));//检索对象。Query query = qp.parse("index");//瞧瞧给我们转换成了什么query对象System.out.println(query);//查询 lucene 没有分页机制,如果需要可以尝试传入collector 。我就写个10,意思获取前十条数据。//返回TOPDOCs 并不是结果,而是结果的一种封装,还包含了其他的检索结果相关的信息TopDocs top = seacher.search(query,10);//结果总数System.out.println(top.totalHits);//遍历结果ScoreDoc[] result = top.scoreDocs;for (int i = 0; i < result.length; i++) {//怎么吃进去 怎么吐出来。。doc进去的当然得doc出来 ,result中只有docid 不是加载全部内容,所以这里需要借助indexseacher//根据docID取出数据。Document doc = seacher.doc(result[i].doc); ////contents 因为没有存储 所以值为null 。System.out.print(doc.getFieldable("filename")+"======");System.out.println(doc.getFieldable("contents"));}}?
能建能查。。。入门够了。
下一步将研究lucene的索引结构。
?