lucene 4.xのパケット実装
luceneは4.x以前はグループ化機能を実現しておらず、業務にグループ化機能が必要な場合は、Bobo-browseのような第三者の提供するプラグインを借りてグループ化を実現しなければならない.しかし、効率的にはよくありません.4.x以降、luceneは自分でパケット機能を実現し、パケットjarパケットを提供しています.
このようなことを利用すると、効率的にパケットの再利用機能を完了することができます.次はくどくどしないで、直接コードを貼って、もし問題があれば、指摘を歓迎します!
これにより、パケットの再統計機能を簡単に実現できます.レポート・クエリーのようなビジネスが複雑で、特定の統計和機能がある場合は、自分で書く必要があります.
lucene-grouping-4.2.0.jar
,このようなことを利用すると、効率的にパケットの再利用機能を完了することができます.次はくどくどしないで、直接コードを貼って、もし問題があれば、指摘を歓迎します!
public static List<HashMap<String, String>> testGroup(String indexPath,String groupField,String sumField){
List<HashMap<String, String>> map=new ArrayList<HashMap<String,String>>();
Directory d1=null;
IndexReader read1=null;
try{
d1=FSDirectory.open(new File(indexPath));//
read1=DirectoryReader.open(d1);//
IndexSearcher sear=new IndexSearcher(new MultiReader(read1));//MultiReader
//
GroupingSearch gSearch=new GroupingSearch(groupField);// place
Query q=new WildcardQuery(new Term(groupField,"*"));//
TopGroups t=gSearch.search(sear, q, 0, Integer.MAX_VALUE);//
GroupDocs[] g=t.groups;//
System.out.println(" "+t.totalHitCount);
System.out.println(" :"+g.length);
for(int i=0;i<g.length;i++){
ScoreDoc []sd=g[i].scoreDocs;
String str =sear.doc(sd[0].doc).get(groupField);
int total=sumcount(str,groupField,sumField,sear);
//System.out.println("place:"+str+"===>"+" :"+g[i].totalHits+);
System.out.println("place:"+str+"===>"+" :"+g[i].totalHits);
HashMap<String, String> m=new HashMap<String, String>();
m.put("word", str);
m.put("wx_count", total+"");
m.put("wx_total", "10000");
map.add(m);
}
read1.close();//
d1.close();
}catch(Exception e){
e.printStackTrace();
}
return map;
}
これにより、パケットの再統計機能を簡単に実現できます.レポート・クエリーのようなビジネスが複雑で、特定の統計和機能がある場合は、自分で書く必要があります.