我是靠谱客的博主 冷静书本,最近开发中收集的这篇文章主要介绍solr facet 和 group的区别,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Facet和Group都是solr对结果的分组处理。但是又有一些区别。

一:Facet 

推荐看这个:http://www.coin163.com/java/docs/201310/d_3010029802.html

facet的查询结果主要是分组信息,分组字段,该字段分成多少组,每组里面有多少记录。但是记录中的具体信息不知道。

Facet返回所有相关的结果并允许用户基于facet的目录重新定义结果集。Facet可以对分组数量进行过滤,以及排序,和日期范围,时间范围分组,但是如果你想得到具体的数据,还得需要查询一次或多次。

FacetField是分组的字段,如:FacetField是“书籍类型”,那么分组(“书籍类型”)可以分为:计算机、物理、数学、文学....(如果FacetLimit是4,就只显示其中4个分组),

显示的结果是:分组的名称facet.getName()和对应分组的数量facet.getCount()。

FacetField可以有多个,“书籍类型”,“价格范围”.... 按照不同字段,每个字段里有多个分组,该分组里的数量

(但是看不到书籍的作者,价格,出版社等信息)

如:书籍类型 -- 计算机 -- 99

      书籍类型 -- 物理  -- 119

....

/**
* facet功能是solr高级搜索的功能
* 根据某个字段分组,然后算出这个字段各个类型的数量
*/
@Test
public void testSolrFacet(){
String URL = "http://localhost:8087/solr/core1";
HttpSolrClient server = new HttpSolrClient(URL); //连接到服务
SolrQuery
query = new SolrQuery("*:*");//查询的字段等
query.setFacet(true);
query.addFacetField("bm","zz"); //根据这两个字段的记录分组
query.setFacetLimit(3);//字段的分组数量
try {
QueryResponse response = server.query(query);
List<FacetField> facets = response.getFacetFields();//使用facet的字段的集合:bm,zz
for(FacetField facet:facets){ //遍历字段的集合
System.out.println("---"+facet.getName()+"---");
List<Count> counts = facet.getValues();
for(Count count:counts){
System.out.println(count.getName() + ":" + count.getCount());//getCount()是该类别的数量
}
}
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

二、Group

Gruop也是用来对结果分组的。它可以得到分组的所有数据,包括分组的记录数量、记录的具体的信息。

@Test
public void testSolrGroup(){
String URL = "http://localhost:8087/solr/core1";
HttpSolrClient server = new HttpSolrClient(URL); //连接到服务
SolrQuery
query = new SolrQuery("*:*");//查询的字段等
query.set(GroupParams.GROUP, true);
query.set(GroupParams.GROUP_FIELD, "bm","zz");
query.set(GroupParams.GROUP_LIMIT, 1);
try {
QueryResponse response = server.query(query);
GroupResponse gp = response.getGroupResponse();
List<GroupCommand> commands = gp.getValues();
for(GroupCommand c : commands){
System.out.println("---"+ c.getName()+"---"); //两个不同的字段
List<Group> gs =
c.getValues();
//遍历每个字段的结果
for(Group group : gs){
//每个字段里面的分组的信息,如:计算机:{numFound=99,start=0,docs=[...]}
//docs是具体的每条记录的信息(SolrDocument),可以看到书籍的所有信息,docs显示的记录数,由GROUP_LIMIT决定
System.out.println(group.getGroupValue()+":"+group.getResult());
}
}
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

最后

以上就是冷静书本为你收集整理的solr facet 和 group的区别的全部内容,希望文章能够帮你解决solr facet 和 group的区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部