lucene 4.2 简单示例

来源:互联网 发布:阿里云创建任务计划 编辑:程序博客网 时间:2024/06/05 08:23
public class LuceneIntroduction {//查询某个目录下的所有文件,将其内容和路径添加到索引库public static void indexTxt(IndexWriter writer,File file) throws IOException, ParseException{if(file.isDirectory()){File[] filePaths=file.listFiles();for(File temp:filePaths){indexTxt(writer,temp);}}else{FileInputStream fis=new FileInputStream(file);Document document=new Document();document.add(new StringField("path",file.getAbsolutePath(),Field.Store.YES));BufferedReader buf=new BufferedReader(new InputStreamReader(fis,"gbk"));do{String temp=buf.readLine();System.out.println(temp);if(temp!=null)document.add(new TextField("contents",temp,Field.Store.YES));}while(buf.readLine()!=null);writer.addDocument(document);}}public static void searchTxt(File file,String str) throws IOException, ParseException{IndexReader reader = DirectoryReader.open(FSDirectory.open(file));IndexSearcher search=new IndexSearcher(reader);Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_42);QueryParser parser = new QueryParser(Version.LUCENE_42, "contents", analyzer);Query query = parser.parse(str);/*Term term=new Term("contents",str);Query query=new TermQuery(term);*//*Term term=new Term("contents",str);PrefixQuery query=new PrefixQuery(term);*/TopDocs results=search.search(query, 10);ScoreDoc[] hits = results.scoreDocs;System.out.println("-----------------------搜索结果:");if(hits.length!=0){for(ScoreDoc s: hits){System.out.println("doc="+s.doc+"-----"+"score="+s.score);Document doc=search.doc(s.doc);System.out.println("path:"+doc.get("path"));System.out.println("content:"+doc.get("contents"));}}else{System.out.println("查找不到结果!");}}//删除索引public static void deleteIndex(String indexDir,String deleteTerm) throws IOException, ParseException{Directory dir=FSDirectory.open(new File(indexDir));IndexWriterConfig indexCfg=new IndexWriterConfig(Version.LUCENE_42,new StandardAnalyzer(Version.LUCENE_42) );//indexCfg.setOpenMode(OpenMode.CREATE);IndexWriter writer=new IndexWriter(dir,indexCfg);//Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_42);//QueryParser parser = new QueryParser(Version.LUCENE_42, "contents", analyzer);//Query query = parser.parse(deleteTerm);Term query=new Term("contents", deleteTerm);writer.deleteDocuments(query);writer.close();}//添加索引public static void addIndex(String indexDir,String addTerm) throws IOException{Directory dir=FSDirectory.open(new File(indexDir));IndexWriterConfig indexCfg=new IndexWriterConfig(Version.LUCENE_42,new StandardAnalyzer(Version.LUCENE_42) );//indexCfg.setOpenMode(OpenMode.APPEND);IndexWriter writer=new IndexWriter(dir,indexCfg);Document doc=new Document();Field field=new TextField("contents",addTerm,Field.Store.YES);doc.add(field);writer.addDocument(doc);writer.commit();writer.close();}//更新索引public static void updateContentsIndex(String indexDir,String sourceTerm ,String updateTerm) throws IOException{Directory dir=FSDirectory.open(new File(indexDir));IndexWriterConfig indexCfg=new IndexWriterConfig(Version.LUCENE_42,new StandardAnalyzer(Version.LUCENE_42) );//indexCfg.setOpenMode(OpenMode.CREATE);IndexWriter writer=new IndexWriter(dir,indexCfg);Term term=new Term("contents", sourceTerm);Field field=new TextField("contents",updateTerm,Field.Store.YES);Document doc=new Document();doc.add(field);writer.updateDocument(term, doc,new StandardAnalyzer(Version.LUCENE_42));writer.commit();writer.close();}//创建索引public static void createIndex(String indexDir,String indexedDir) throws IOException, ParseException{Directory dir=FSDirectory.open(new File(indexDir));IndexWriterConfig indexCfg=new IndexWriterConfig(Version.LUCENE_42,new StandardAnalyzer(Version.LUCENE_42) );indexCfg.setOpenMode(OpenMode.CREATE);IndexWriter writer=new IndexWriter(dir,indexCfg);indexTxt(writer,new File(indexedDir));writer.close();}}

原创粉丝点击