16、遍歷所有關鍵字的api方式
阿新 • • 發佈:2018-11-01
之前的一些講述中,我們介紹了查詢索引的功能,但一般都是通過域和關鍵字進行的查詢,那如果我們不知道域或想要查詢出所有的關鍵字怎麼辦呢,下面我就給出兩個解決方案,程式碼很簡單
通過指定域方式獲取該域中所有的關鍵字
//遍歷指定域中的所有關鍵字的方式 @Test public void searchIndex() throws Exception { //開啟索引庫 //指定索引庫存放的位置 Directory directory = FSDirectory.open(new File("D:\\LucentTest\\luceneIndex2")); //建立一個IndexReader物件 IndexReader indexReader = DirectoryReader.open(directory); //建立TermsEnum物件 所有關鍵字存放的類 TermsEnum enumeration = null; IndexSearcher searcher = new IndexSearcher(indexReader); IndexReader reader = searcher.getIndexReader();//得到搜尋器的索引閱讀器 Fields fields = MultiFields.getFields(reader); Terms terms = fields.terms("name"); BytesRef byteRef = null; enumeration = terms.iterator(enumeration); while((byteRef = enumeration.next()) != null) { String term = new String(byteRef.bytes, byteRef.offset, byteRef.length); System.out.println("term is : " + term); } }
只有索引目錄獲取所有域所有關鍵字的方法
//獲取全部關鍵字的方法 @Test public void sqlIndex() throws Exception{ //開啟索引庫 //指定索引庫存放的位置 Directory indexDirectory = FSDirectory.open(new File("D:\\LucentTest\\luceneIndex2")); //建立一個IndexReader物件 用來開啟索引 IndexReader indexReader = DirectoryReader.open(indexDirectory); //取出所有域的資訊 Fields fields = MultiFields.getFields(indexReader); //對索引域進行遍歷 Iterator<String> fieldsIterator = fields.iterator(); while(fieldsIterator.hasNext()){ String field = fieldsIterator.next(); Terms terms = fields.terms(field); TermsEnum termsEnums = terms.iterator(null); BytesRef byteRef = null; System.out.println("field : "+ field); while((byteRef = termsEnums.next()) != null) { String term = new String(byteRef.bytes, byteRef.offset, byteRef.length); System.out.println("term is : " + term); } } }
其實在這兩個方法中,我們要關心的就是遍歷的部分,及 MultiFields.getFields(indexReader);和 TermsEnum這個類的用法, TermsEnum 是存放所有索引關鍵字抽象類,看程式碼我們就能看的出來
下面是小編的微信轉帳二維碼,小編再次謝謝讀者的支援,小編會更努力的
----請看下方↓↓↓↓↓↓↓
百度搜索 Drools從入門到精通:可下載開源全套Drools教程
深度Drools教程不段更新中:
更多Drools實戰陸續釋出中………
掃描下方二維碼關注公眾號 ↓↓↓↓↓↓↓↓↓↓