`
qindongliang1922
  • 浏览: 2184573 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117549
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125937
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59934
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71309
社区版块
存档分类
最新评论

lucene4.x的分组实现

阅读更多
lucene在4.x之前,没有实现分组的功能,如果业务中有需要分组的功能,那么必须的借助第三方的提供的插件,来实现分组,例如Bobo-browse,或者,自己用lucene写分组功能,笔者个人觉得用第三方的分组插件,虽说功能强大,但是比较繁琐,自己写的话,可以实现,但是效率方面却不是很好,在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;
	}





至此,已经可以简单的实现分组去重统计的功能了,如果业务比较复杂,例如像报表查询,以及一些特定的统计求和功能,这个就可能需要自己写了



分享到:
评论
1 楼 她的酒窝 2014-07-09  
TopGroups t=gSearch.search(sear, q, 0, Integer.MAX_VALUE);
groupLimit参数不能设置这么大,不然会报NegativeArraySizeException错误

相关推荐

    Lucene4.X实战类baidu搜索的大型文档海量搜索系统-12.Lucene搜索深入实战进阶2 共9页.pptx

    在Lucene4.x版本中,它提供了丰富的API和工具,使得开发者能够构建高效的搜索功能。本部分主要聚焦于Lucene的查询解析器(QueryParser)及其查询语法的高级应用。 QueryParser是Lucene中用于解析用户输入的查询字符...

    java操作elasticsearch5.x的demo

    通过Java API操作Elasticsearch 5.x,你可以实现对数据的索引、查询、更新和删除等基本操作,以及更复杂的聚合分析。在实际项目中,可以根据需求灵活组合使用这些API,构建高效的数据处理系统。记住,Elasticsearch...

    玩转搜索框架ElasticSearch7.x实战1

    此外,Elasticsearch还支持聚合操作,可以轻松实现统计、排序和分组等功能,这是SQL中`INSERT`、`UPDATE`操作无法比拟的。 总的来说,Elasticsearch是一个强大的搜索框架,它在处理大规模数据的搜索、分析和实时性...

    Elasticsearch java工具类

    本项目是针对Elasticsearch 5.x版本的Java工具类,旨在简化与SpringBoot集成时的开发流程,通过封装常用API和自定义注解,实现开箱即用的功能。 首先,让我们深入理解Elasticsearch的Java API。Elasticsearch提供了...

    hibernate-jar包

    Hibernate Search 4.4.0 Alpha2版本与Lucene 4.x兼容。这意味着你可以利用Lucene的最新特性,如更高效的倒排索引和高级查询语法。此外,通过`@IndexedEmbedded`和`@ContainedIn`注解,可以实现对关联对象的索引,...

    elasticsearch-5.0.0-alpha4.tar.gz

    用户可以通过X-Pack插件进一步增强安全性能,实现更高级别的访问控制和监控。 ### 7. 性能优化 每个新版本都会针对性能进行优化,5.0.0-alpha4也不例外。此版本可能包括更快的索引速度、更高的搜索效率以及更少的...

    solr-5.3.2

    7. **Lucene升级**:Solr-5.3.2基于Lucene 5.x版本,Lucene是Solr的底层搜索引擎库,提供了最新的搜索算法和性能优化。 8. **性能优化**:此版本对性能进行了优化,包括更快的查询响应时间、更高效的内存管理以及更...

    elasticsearch-7.16.2-windows-x86-64

    **4. 分词与全文检索** Elasticsearch 内置了 Lucene 的分词器,能对文本进行预处理,将其分解为有意义的词汇单元(称为“术语”),便于全文搜索。此外,它还支持多种高级搜索功能,如短语匹配、模糊搜索、同义词和...

    最新版windows solr-8.5.2.zip

    4. **核心(Core)**:在Solr 7.x之前,核心是Solr实例中的工作单元,类似集合的概念。在Solr 8.x中,核心和集合的概念已经合并,但仍保留了核心的概念。 5. **查询(Query)**:用户通过发送查询请求到Solr服务器...

    Elasticsearch技术解析与实战

    1. 分布式架构:Elasticsearch基于Lucene构建,但超越了单机搜索的局限,实现了分布式索引和搜索。每个节点都可以存储和处理数据,通过集群通信实现数据的分布式处理和负载均衡。 2. RESTful API:Elasticsearch...

    ElasticSearch分布式搜索引擎 v7.17.18.zip

    Elasticsearch是一个开源的、高度可扩展的全文搜索引擎,基于Lucene构建,旨在提供实时、分布式、容错能力强的搜索和数据分析能力。在v7.17.18版本中,Elasticsearch继续优化了性能和稳定性,为开发者和数据分析师...

    linux elasticsearch 7.17.0

    Elasticsearch基于Lucene库,但提供了更高级别的分布式、实时、容错功能,使其成为大数据场景下理想的解决方案。 1. **分布式架构**:Elasticsearch是设计为分布式系统的,支持数据的水平扩展。这意味着你可以通过...

    elastic搜索引擎.zip

    11. **安全与监控**:Elasticsearch提供X-Pack插件(现已被Kibana的Security和Monitoring替代)来实现用户认证、权限控制以及集群健康状况的实时监控。 这个“elastic搜索引擎.zip”可能包含的文件可能有安装指南、...

    Elasticsearch权威指南(中文).pdf

    4. **安全控制**:使用X-Pack或第三方插件实现身份验证、权限控制。 **总结** 《Elasticsearch权威指南》中文版为读者提供了全面了解和深入实践Elasticsearch的路径,特别是对于初学者,建议重点关注索引构建、...

    elasticsearch-5.6.2.tar.gz

    4. **分片(Shard)**: 分片是Elasticsearch处理大量数据的关键,每个索引可以被分成多个分片,这些分片可以在集群的不同节点上分布,从而实现水平扩展。 5. **副本(Replica)**: 分片的副本用于提高系统的冗余和...

    elasticsearch-cookbook-ebook.pdf

    - **聚合分析**:通过分组统计等方法,实现数据的多维度分析。 #### 五、性能调优与故障排查 - **索引优化**:通过调整分词器设置、文档类型等方式改善索引质量。 - **缓存策略**:合理利用缓存机制减少磁盘IO操作...

    elasticsearch-7.17.7-windows-x86-64.zip

    Lucene是一款高效的、可扩展的全文检索库,Elasticsearch在其基础上构建了一套易于使用的API和分布式架构,使得开发者能够方便地在大规模数据集上实现复杂的搜索功能。 2. **分布式特性**:Elasticsearch设计时就...

    JAVA上百实例源码以及开源项目源代码

    Java实现的FTP连接与数据浏览程序 1个目标文件 摘要:Java源码,网络相关,FTP Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 ...

    Elasticsearch实战.zip

    - **聚合(Aggregations)**:提供统计分析功能,如求和、平均值、最大值、最小值等,还可实现桶聚合,用于按某种标准对结果分组。 **4. 集群与节点管理** - **节点(Node)**:组成Elasticsearch集群的基本单元,...

Global site tag (gtag.js) - Google Analytics