我有一个与Lucene(Java + Hibernate + Spring + JSF + Lucene)合作的EDM(电子文档管理/存档)。 处理的文件具有不同的格式:XML,DOCX,JPEG,INDD,PDF等。 所有这些都是在全文索引之后存档的。
搜索可以通过网页完成:用户填写关键字,Lucene + Hibernate显示已编制索引的所有文档,包含这些关键字。
我想知道Lucene索引的所有关键字,以便用户订阅他们感兴趣的关键字。
实际上,如果用户想要知道所有带有“法国”关键字的文件,他将不得不在网页上进行搜索。 我想要的是用户订阅“France”关键字,当有关此关键字的文档被编入索引时,用户将收到通知,告诉他哪些文档包含他订阅的关键字。
但我只是不知道如何查看Lucene索引既没有检测到Lucene对给定关键字的计数发生了变化。
有人可以告诉我该怎么做吗?
感谢名单。
答案 0 :(得分:0)
您可以构建一个包含索引中所有术语的Map,映射到它们出现的文档数量。请注意
根据您的数据,您可能需要手动或通过某种算法(例如最常用的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());
}
}