1. 程式人生 > >16、遍歷所有關鍵字的api方式

16、遍歷所有關鍵字的api方式

之前的一些講述中,我們介紹了查詢索引的功能,但一般都是通過域和關鍵字進行的查詢,那如果我們不知道域或想要查詢出所有的關鍵字怎麼辦呢,下面我就給出兩個解決方案,程式碼很簡單

通過指定域方式獲取該域中所有的關鍵字

//遍歷指定域中的所有關鍵字的方式
@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實戰陸續釋出中………

掃描下方二維碼關注公眾號 ↓↓↓↓↓↓↓↓↓↓