我不认为使用 Lucene 是实现您想要的最佳方式,但您可以迭代结果并在地图中收集每个国家/地区的计数:
final Map<String, Integer> country2count = new HashMap<String, Integer>();
for (final ScoreDoc hit : hits) {
final int docId = hit.doc;
if (!reader.isDeleted(docId)) {
// Get the document from docId
final Document document = searcher.doc(docId);
// Get the country
final String country = document.get("from");
if(country2count.containsKey(country)){
int prevCount = country2count.get(country);
country2count.put(country, ++prevCount);
}else{
country2count.put(country, 1);
}
}
}
我建议您不要使用索引,而是使用简单的日志,而不是使用以下内容获取用户数量最多的国家/地区:
猫 id_name_from.log | awk '{打印 $3}' | 排序-k 3 | 唯一的-c | 排序-nrk 1
示例:保存为“id \t name \t from”的日志文件:
1 foo China
2 foo Usa
3 bar China
4 foo China
5 foo China
6 foo Usa
7 bar China
8 foo China
9 foo Usa
脚本:
cat log | awk '{print $3}' | sort | uniq -c | sort -nrk 1
结果:
6 China
3 Usa