簡體   English   中英

如何訪問Lucene索引中記錄的關鍵字?

[英]How to access keywords recorded in a Lucene index?

我有一個與Lucene(Java + Hibernate + Spring + JSF + Lucene)合作的EDM(電子文檔管理/存檔)。 處理的文件具有不同的格式:XML,DOCX,JPEG,INDD,PDF等。所有文件都在全文索引后存檔。

搜索可以通過網頁完成:用戶填寫關鍵字,Lucene + Hibernate顯示已編制索引的所有文檔,其中包含這些關鍵字。

我想要知道Lucene索引的所有關鍵字,以便用戶訂閱他們感興趣的關鍵字。

實際上,如果用戶想要知道具有“法國”關鍵字的所有文檔,他將不得不在網頁上進行搜索。 我想要的是用戶訂閱“France”關鍵字,當具有此關鍵字的文檔將被編入索引時,用戶將收到通知,告知他哪些文檔包含他已訂閱的關鍵字。

但我只是不知道如何查找Lucene索引既沒有檢測到Lucene對給定關鍵字的計數發生了變化。

有人能告訴我該怎么做嗎?

感謝名單。

您可以構建一個包含索引中所有術語的Map,映射到它們出現的文檔數量。請注意這一點

  1. lucene的條款很難被視為關鍵詞。
  2. 根據索引的大小,此映射將變得非常大。

根據您的數據,您可能需要手動或通過某種算法(例如20個最常用的術語)選擇n個最佳術語/關鍵詞。

IndexReader reader = ..... // Open your index

// Create a new HashMap, mapping Terms to doc frequency
Map<String,Integer> allTerms = new HashMap<String,Integer>();

// Iterate over all fields of your documents
Fields fields = MultiFields.getFields(reader);
for (String field : fields) {
    Terms terms = fields.terms(field);
    TermsEnum termsEnum = terms.iterator();

    // Iterate over all terms for the current field
    for(BytesRef br = termsEnum.next(); br != null; br = termsEnum.next()) {
        // Put the term and the number of occurrences into the map.
        allTerms.put(br.utf8ToString(), termsEnum.docFreq());
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM