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
....
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29/** * 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也是用来对结果分组的。它可以得到分组的所有数据,包括分组的记录数量、记录的具体的信息。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30@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内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复