package lucene;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
public class TextFileIndexer {
public static void main(String[] args) throws Exception {
/* 指明要索引文件夹的位置,这里是C盘的source文件夹下 */
File fileDir = new File("c:\\source");
/* 这里放索引文件的位置 */
File indexDir = new File("c:\\index");
Directory dir = FSDirectory.open(indexDir);
Analyzer lunAnalyzer = new StandardAnalyzer(Version.LUCENE_36);
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_36, lunAnalyzer);
iwc.setOpenMode(OpenMode.CREATE);
IndexWriter indexWriter = new IndexWriter(dir, iwc);
File[] textFiles = fileDir.listFiles();
//开始时间
long startTime = new Date().getTime();
//增加document到索引去
for(int i=0; i
if(textFiles[i].isFile() && textFiles[i].getName().endsWith(".txt")){
System.out.println("File:"+textFiles[i].getCanonicalPath()+" 正在被索引....");
//读取文件内容
String tmp = FileReaderAll(textFiles[i].getCanonicalPath(), "GBK");
System.out.println("文件内容:");
System.out.println(tmp);
System.out.println("文件内容结束");
Document document = new Document();
Field FieldPath = new Field("path", textFiles[i].getPath(),
Field.Store.YES, Field.Index.NO);
Field FieldBody = new Field("body", tmp, Field.Store.YES,
Field.Index.ANALYZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
document.add(FieldPath);
document.add(FieldBody);
indexWriter.addDocument(document);
}
}
indexWriter.close();
//测试索引时间
long endTime = new Date().getTime();
System.out.println("建立索引总花费了:"+(endTime-startTime)+"毫秒值");
}
//读取文件内容
public static String FileReaderAll(String FileName, String charset)
throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(
new FileInputStream(FileName), charset));
String line = new String();
String temp = new String();
while ((line = reader.readLine()) != null) {
temp += line;
}
reader.close();
return temp;
}
}
输出结果为:
File:C:\source\test1.txt 正在被索引....
文件内容:
欢迎来到绝对秋香的博客。
文件内容结束
File:C:\source\test2.txt 正在被索引....
文件内容:
绝对秋香引领你走向潮流。
文件内容结束
建立索引总花费了:406毫秒值
第四步,建立测试类TestQuery,并运行主函数,输出测试结果,查找索引值
package lucene;
import java.io.File;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
public class TestQuery {
public static void main(String[] args) throws Exception{
//搜索的索引路径
String index = "c:\\index";
IndexReader indexReader = IndexReader.open(FSDirectory.open(new File(index)));
IndexSearcher searcher = new IndexSearcher(indexReader);
ScoreDoc[] hits = null;
//搜索的关键字
String queryString = "绝对";
Query query = null;
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);
try {
QueryParser qp = new QueryParser(Version.LUCENE_36, "body", analyzer);
query = qp.parse(queryString);
} catch (Exception e) {
// TODO: handle exception
}
if(searcher != null){
//返回最多10条记录
TopDocs results = searcher.search(query, 10);
hits = results.scoreDocs;
if(hits.length > 0){
System.out.println("找到"+hits.length+"个结果!");
System.out.println(hits[0].toString());
}
searcher.close();
}
}
}
结果:
找到2个结果!
doc=0 score=0.21019982 shardIndex=-1
给个参加网站: