初始 lucene

一, 全文搜索引擎的三个组成部分:

  1. 索引部分

  2. 分词部分

  3. 搜索部分

	/**
	 * 建立索引
	 */
	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();
		}
	}
	}
}


你可能感兴趣的:(初始 lucene)