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();
}
}
lucene 4.2 简单示例
最新推荐文章于 2013-04-27 14:12:23 发布