一, 全文搜索引擎的三個組成部分:java
索引部分搜索引擎
分詞部分code
搜索部分對象
/** * 創建索引 */ 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(); } } } }