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;
}
至此,已经可以简单的实现分组去重统计的功能了,如果业务比较复杂,例如像报表查询,以及一些特定的统计求和功能,这个就可能需要自己写了
分享到:
相关推荐
在Lucene4.x版本中,它提供了丰富的API和工具,使得开发者能够构建高效的搜索功能。本部分主要聚焦于Lucene的查询解析器(QueryParser)及其查询语法的高级应用。 QueryParser是Lucene中用于解析用户输入的查询字符...
通过Java API操作Elasticsearch 5.x,你可以实现对数据的索引、查询、更新和删除等基本操作,以及更复杂的聚合分析。在实际项目中,可以根据需求灵活组合使用这些API,构建高效的数据处理系统。记住,Elasticsearch...
此外,Elasticsearch还支持聚合操作,可以轻松实现统计、排序和分组等功能,这是SQL中`INSERT`、`UPDATE`操作无法比拟的。 总的来说,Elasticsearch是一个强大的搜索框架,它在处理大规模数据的搜索、分析和实时性...
本项目是针对Elasticsearch 5.x版本的Java工具类,旨在简化与SpringBoot集成时的开发流程,通过封装常用API和自定义注解,实现开箱即用的功能。 首先,让我们深入理解Elasticsearch的Java API。Elasticsearch提供了...
Hibernate Search 4.4.0 Alpha2版本与Lucene 4.x兼容。这意味着你可以利用Lucene的最新特性,如更高效的倒排索引和高级查询语法。此外,通过`@IndexedEmbedded`和`@ContainedIn`注解,可以实现对关联对象的索引,...
用户可以通过X-Pack插件进一步增强安全性能,实现更高级别的访问控制和监控。 ### 7. 性能优化 每个新版本都会针对性能进行优化,5.0.0-alpha4也不例外。此版本可能包括更快的索引速度、更高的搜索效率以及更少的...
7. **Lucene升级**:Solr-5.3.2基于Lucene 5.x版本,Lucene是Solr的底层搜索引擎库,提供了最新的搜索算法和性能优化。 8. **性能优化**:此版本对性能进行了优化,包括更快的查询响应时间、更高效的内存管理以及更...
**4. 分词与全文检索** Elasticsearch 内置了 Lucene 的分词器,能对文本进行预处理,将其分解为有意义的词汇单元(称为“术语”),便于全文搜索。此外,它还支持多种高级搜索功能,如短语匹配、模糊搜索、同义词和...
4. **核心(Core)**:在Solr 7.x之前,核心是Solr实例中的工作单元,类似集合的概念。在Solr 8.x中,核心和集合的概念已经合并,但仍保留了核心的概念。 5. **查询(Query)**:用户通过发送查询请求到Solr服务器...
1. 分布式架构:Elasticsearch基于Lucene构建,但超越了单机搜索的局限,实现了分布式索引和搜索。每个节点都可以存储和处理数据,通过集群通信实现数据的分布式处理和负载均衡。 2. RESTful API:Elasticsearch...
Elasticsearch是一个开源的、高度可扩展的全文搜索引擎,基于Lucene构建,旨在提供实时、分布式、容错能力强的搜索和数据分析能力。在v7.17.18版本中,Elasticsearch继续优化了性能和稳定性,为开发者和数据分析师...
Elasticsearch基于Lucene库,但提供了更高级别的分布式、实时、容错功能,使其成为大数据场景下理想的解决方案。 1. **分布式架构**:Elasticsearch是设计为分布式系统的,支持数据的水平扩展。这意味着你可以通过...
11. **安全与监控**:Elasticsearch提供X-Pack插件(现已被Kibana的Security和Monitoring替代)来实现用户认证、权限控制以及集群健康状况的实时监控。 这个“elastic搜索引擎.zip”可能包含的文件可能有安装指南、...
4. **安全控制**:使用X-Pack或第三方插件实现身份验证、权限控制。 **总结** 《Elasticsearch权威指南》中文版为读者提供了全面了解和深入实践Elasticsearch的路径,特别是对于初学者,建议重点关注索引构建、...
4. **分片(Shard)**: 分片是Elasticsearch处理大量数据的关键,每个索引可以被分成多个分片,这些分片可以在集群的不同节点上分布,从而实现水平扩展。 5. **副本(Replica)**: 分片的副本用于提高系统的冗余和...
- **聚合分析**:通过分组统计等方法,实现数据的多维度分析。 #### 五、性能调优与故障排查 - **索引优化**:通过调整分词器设置、文档类型等方式改善索引质量。 - **缓存策略**:合理利用缓存机制减少磁盘IO操作...
Lucene是一款高效的、可扩展的全文检索库,Elasticsearch在其基础上构建了一套易于使用的API和分布式架构,使得开发者能够方便地在大规模数据集上实现复杂的搜索功能。 2. **分布式特性**:Elasticsearch设计时就...
Java实现的FTP连接与数据浏览程序 1个目标文件 摘要:Java源码,网络相关,FTP Java实现的FTP连接与数据浏览程序,实现实例化可操作的窗口。 部分源代码摘录: ftpClient = new FtpClient(); //实例化FtpClient对象 ...
- **聚合(Aggregations)**:提供统计分析功能,如求和、平均值、最大值、最小值等,还可实现桶聚合,用于按某种标准对结果分组。 **4. 集群与节点管理** - **节点(Node)**:组成Elasticsearch集群的基本单元,...