facet只是简单统计记录数,若是须要获取doc信息,并不能为每组数据返回实际的数据回来,查询实际数据还须要再次进行查询,group相似于关系型数据库中的group by,除了分组外,还能返回实际数据html
查询solr+memory,显示id和name字段,按照price分组,java
http://192.168.10.125:8983/solr/techproducts/select?fl=id,name&q=solr+memory&group=true&group.field=price
分组结果:数据库
{ "responseHeader":{ "status":0, "QTime":46, "params":{ "q":"solr memory", "fl":"id,name", "group.field":"price", "group":"true"}}, "grouped":{ "price":{ "matches":6, "groups":[{ "groupValue":0.0, "doclist":{"numFound":1,"start":0,"docs":[ { "id":"SOLR1000", "name":"Solr, the Enterprise Search Server"}] }}, { "groupValue":74.99, "doclist":{"numFound":1,"start":0,"docs":[ { "id":"VS1GB400C3", "name":"CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail"}] }}, ... ]}}}
按照price进行facetapache
http://192.168.10.125:8983/solr/techproducts/select?q=*:*&facet=true&facet.field=price&facet.limit=8
facet结果片断,显示了不一样价格和其对应的数量ide
"facet_counts":{ "facet_queries":{}, "facet_fields":{ "price":[ "0.0",3, "11.5",1, "19.95",1, "74.99",1, "92.0",1, "179.99",1, "185.0",1, "279.95",1]}, "facet_ranges":{}, "facet_intervals":{}, "facet_heatmaps":{}}}
public static void groupQuery1(HttpSolrClient solrClient,String collecionName) throws Exception{ // 设置查询条件 SolrQuery query = new SolrQuery(); query.setQuery("solr+memory"); // 返回列 query.setFields("id,name"); // 开启group的分组查询 query.setParam(GroupParams.GROUP, true); // 设置分组的字段 query.setParam(GroupParams.GROUP_FIELD, "price"); // 设置返回行数 query.setRows(5); QueryResponse qr = solrClient.query(collecionName,query); GroupResponse groupResponse = qr.getGroupResponse(); // 分组字段种类的list List<GroupCommand> values = groupResponse.getValues(); for (GroupCommand groupCommand : values) { String groupName = groupCommand.getName(); // 每种分类字段下包含多少个值 List<Group> groupValue = groupCommand.getValues(); for (Group group : groupValue) { // 搜索结果 SolrDocumentList result = group.getResult(); for (SolrDocument solrDocument : result) { Object id = solrDocument.getFieldValue("id"); Object name = solrDocument.getFieldValue("name"); System.out.println("groupName: "+groupName+"; id: "+ id+"; name: "+name); } } } }
输出结果ui
groupName: price; id: SOLR1000; name: Solr, the Enterprise Search Server groupName: price; id: VS1GB400C3; name: CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail groupName: price; id: VDBDB1A16; name: A-DATA V-Series 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - OEM groupName: price; id: TWINX2048-3200PRO; name: CORSAIR XMS 2GB (2 x 1GB) 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) Dual Channel Kit System Memory - Retail groupName: price; id: 0579B002; name: Canon PIXMA MP500 All-In-One Photo Printer
public static void queryFacet(HttpSolrClient solrClient,String collecionName) throws Exception{ SolrQuery query = new SolrQuery(); query.setQuery("*"); // 不查询数据,只查询facet结果 query.setFacet(true); // facet字段 query.addFacetField("price"); // facet结果总数 query.setFacetLimit(8); // 开始查询 QueryResponse queryResponse = solrClient.query(collecionName, query); List<FacetField> facetFields = queryResponse.getFacetFields(); for (FacetField facetField : facetFields) { String facetName=facetField.getName(); List<FacetField.Count> values = facetField.getValues(); for (FacetField.Count count : values) { String name = count.getName(); long num=count.getCount(); System.out.println("facetName: "+facetName+"; name: "+name+"; num: "+num); } } }
输出结果:.net
facetName: price; name: 0.0; num: 3 facetName: price; name: 11.5; num: 1 facetName: price; name: 19.95; num: 1 facetName: price; name: 74.99; num: 1 facetName: price; name: 92.0; num: 1 facetName: price; name: 179.99; num: 1 facetName: price; name: 185.0; num: 1 facetName: price; name: 279.95; num: 1
https://blog.csdn.net/a925907195/article/details/47257243code
http://lucene.apache.org/solr/guide/7_0/faceting.htmlhtm
http://lucene.apache.org/solr/guide/7_0/result-grouping.htmlblog