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;
	}



これにより、パケットの再統計機能を簡単に実現できます.レポート・クエリーのようなビジネスが複雑で、特定の統計和機能がある場合は、自分で書く必要があります.