初始 lucene

一, 全文搜索引擎的三個組成部分:java

  1. 索引部分搜索引擎

  2. 分詞部分code

  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();
		}
	}
	}
}
相關文章
相關標籤/搜索