Lucene的运用
Lucene的使用
在全文索引工具中,由以下3个部分组成:
1、索引部分
2、分词部分
3、搜索部分
一、创建索引
/** * 建立索引 */ public void index(){ IndexWriter writer=null; try { //1、创建Directory // Directory directory=new RAMDirectory();//创建在内存中 Directory directory=FSDirectory.open(new File("E:/luceneWorkspace/test/index01"));//创建在硬盘上 //2、创建IndexWriter IndexWriterConfig iwc=new IndexWriterConfig(Version.LUCENE_36, new StandardAnalyzer(Version.LUCENE_36)); writer=new IndexWriter(directory, iwc); //3、创建Document对象 Document doc=null; //4、为Document添加Field File f=new File("E:/luceneWorkspace/test/example"); for(File file:f.listFiles()){ doc=new Document(); doc.add(new Field("content",new FileReader(file))); doc.add(new Field("filename",file.getName(),Field.Store.YES,Field.Index.NOT_ANALYZED)); doc.add(new Field("path",file.getAbsolutePath(),Field.Store.YES,Field.Index.NOT_ANALYZED)); //5、通过IndexWriter添加问 writer.addDocument(doc); } } catch (Exception e) { e.printStackTrace(); }finally{ if(writer!=null){ try { writer.close(); } catch (CorruptIndexException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } }
二、搜索
/** * 搜索 */ public void searcher(){ try { //1、创建Directory Directory directory=FSDirectory.open(new File("E:/luceneWorkspace/test/index01")); //2、创建IndexReader IndexReader reader=IndexReader.open(directory); //3、根据IndexReader创建IndexSearcher IndexSearcher searcher=new IndexSearcher(reader); //4、创建搜索的Query //创建parser来确定要搜索文件的内容,第二个参数表示搜索的域 QueryParser parser=new QueryParser(Version.LUCENE_36, "content", new StandardAnalyzer(Version.LUCENE_36)); //创建query,表示搜索喻为content中包含java的文档 Query query=parser.parse("permissions"); //5、根据searcher搜索并且返回TopDocs 10表示10条数据 TopDocs tds=searcher.search(query, 10); //6、根据TopDocs获取ScoreDoc ScoreDoc[] sds=tds.scoreDocs; for (ScoreDoc scoreDoc : sds) { //7、根据searcher和ScoreDoc对象获取具体Document对象 Document d=searcher.doc(scoreDoc.doc); //8、根据Document对象获取需要的值 System.out.println(d.get("filename")+"-------"+d.get("path")); } //9、关闭reader reader.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
- 1楼ZW_Ren3天前 09:28
- 分词部分呢?
- Re: weibinbinlove3天前 10:49
- 回复ZW_Renn分词部分在接下来的文章里面会详细写道