标签:
一, 全文搜索引擎的三个组成部分:
索引部分
分词部分
搜索部分
/** * 建立索引 */ 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