1.對字段(域)爲多值屬性的,即multiValued="true"。測試
facet是能夠對多值屬性進行分組的,可是Group是不能夠的。ui
2.對字段(域)爲分詞屬性的,以下:<field name="docText" type="text_ik" multiValued="false" indexed="true" required="false" stored="true"/>排序
facet是能夠對分詞字段進行分組的,但Group是不能夠的。索引
3.對於其餘字段屬性的,目前測試的string、long等,facet和group都是能夠進行分組的。\文檔
4.傳入多個分組字段時,每一個字段都會有一個對應的查詢分組結果,即各個字段之間是平行關係,非嵌套關係。get
下面給出一些代碼和測試結果:string
facet的測試:it
public void solrFacet(String collectionName, String strCondition,
String... fields) {
try {
SolrQuery solrQuery = new SolrQuery();
solrQuery.set("collection", collectionName);
solrQuery.setFacet(true);io
//控制輸出分組的個數,對於有上千個分組的結果,能夠控制只返回前一百個分組
solrQuery.setFacetLimit(10);
solrQuery.addFacetQuery(strCondition);
solrQuery.addFacetField(fields);require
//分組後count數小於設置的組會從結果列表中拋棄
solrQuery.setFacetMinCount(2);
//默認按count降序排序,即各個分組包含的個數爲count
solrQuery.setFacetSort(solrQuery.getFacetSortString());
QueryResponse solrQueryResponse=solrServer.query(solrQuery);
List<FacetField> facetFields = solrQueryResponse.getFacetFields();
//返回facet列表
for (FacetField facet : facetFields) {
System.out.println(facet.getName());
System.out.println("------");
List<Count> values = facet.getValues();
for (Count count : values) {
System.out.println(count.getName()+"---"+count.getCount());
}
}
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
group的測試:
/**
* solr 分組查詢 group by
*/
public void solrGroup(String strCondition, String... fields) {
try {
SolrQuery solrQuery = new SolrQuery();
solrQuery.setQuery(strCondition);
solrQuery.setParam("group", true);// 是否分組
solrQuery.setParam("group.field", fields);// 分組的域(此處以公司id進行分組)
// solrQuery.setParam("group.query",
// "id:*");//還能夠根據其餘條件進行過濾,如價格在1到100之間
solrQuery.setParam("group.limit", "3");// 每組顯示的個數,默認爲1
// solrQuery.setParam("group.ngroups",
// true);//是否計算所得分組個數;注意:當每一個分組顯示數目大於1個時,不能用分組數量來計算總頁碼
// solrQuery.setStart(0); //起始索引值
// solrQuery.setRows(100);//顯示幾條數據
QueryResponse resp = solrServer.query(solrQuery);
GroupResponse gresp = resp.getGroupResponse();// 注意:此處不能再用resp.getResults()接收結果
List<GroupCommand> commands = gresp.getValues();
if (commands != null) {
for (GroupCommand com : commands) {
// System.out.println("總的分組個數:" + com.);
System.out.println("values:" + com.getName());
System.out.println("分組的個數:" + com.getValues().size());
if (com.getValues().isEmpty()) {
System.out.println("沒有值...");
}
for (Group group : com.getValues()) {
SolrDocumentList hits = group.getResult();
System.out.println("涉及文檔個熟:" + hits.size());
for (SolrDocument doc : hits) {
System.out.println("id: "
+ (String) doc.getFieldValue("id")
+ ", rowkey: "
+ (String) doc.getFieldValue("rowkey")
.toString() + ", docText"
+ doc.getFieldValue("docText") + "");
}
}
}
}
} catch (SolrServerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}