标签:
一, 全文搜索引擎的三个组成部分:
索引部分
分词部分
搜索部分
/**
* 建立索引
*/
public void index() {
IndexWriter iw = null;
try {
//1. 创建 Directory对象
// Directory dir = new RAMDirectory(); // 建立在内存中
Directory dir = FSDirectory.open(Paths.get("F:/fullindex/index01"));
//2. 创建 IndexWriter
IndexWriterConfig iwc = new IndexWriterConfig(new StandardAnalyzer());
iw = new IndexWriter(dir, iwc);
//3. 创建 Document 对象
Document doc = null;
File file = new File("F:/fullindex/example");
for(File f : file.listFiles()) {
doc = new Document();
//4. 为 Document 对象添加 Field
doc.add(new TextField("content", new FileReader(f)));
doc.add(new Field("fileName", f.getName(), TextField.TYPE_STORED));
doc.add(new Field("path", f.getAbsolutePath(), TextField.TYPE_STORED));
//5. 通过 IndexWriter 添加文档到索引中
iw.addDocument(doc);
}
//6. 关闭流
iw.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(null != iw) {
try {
iw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 搜索
*/
public void searcher() {
DirectoryReader ireader = null;
try {
//1. 创建 Directory
Directory dir = FSDirectory.open(Paths.get("F:/fullindex/index01"));
//2. 创建 DirectoryReader
ireader = DirectoryReader.open(dir);
//3. 根据 DirectoryReader 创建 IndexSearch
IndexSearcher isearcher = new IndexSearcher(ireader);
//4. 创建搜索的 query
QueryParser parser = new QueryParser("content", new StandardAnalyzer());
Query query = parser.parse("java");
//5. 根据 search 搜索并返回 TopDocs
TopDocs tds = isearcher.search(query, 10);
//6. 根据 TopDocs 获取 ScordDoc 对象
ScoreDoc[] scoreDocs = tds.scoreDocs;
for(ScoreDoc sd : scoreDocs) {
//7. 根据 search 和 ScordDoc 对象获取具体的 Document 对象
Document doc = isearcher.doc(sd.doc);
//8. 根据 Document 对象获取需要的值
System.out.println("filename:" + doc.get("fileName") + "---> path:" + doc.get("path"));
}
//9. 关闭流
ireader.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if(null != ireader) {
try {
ireader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
标签:
原文地址:http://my.oschina.net/u/2002410/blog/528770