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