說到分組統計估計大家都不會陌生,就是數據庫的group by語句,但是當我們采用solr4.5全文檢索時,數據庫提供再好的sql語句都沒有任何的意義了,那么在solr4.5中我們如何做到分組統計呢?其實很簡單,下面我們來看看怎么做。
示例場景:
現在有個電子商務網站的產品搜索功能,不同的商家發布不同的產品,我們想通過關鍵詞“手機”去查找不同商家下面有多少有關手機的產品。假設索引庫的結構是產品id(id)、產品標題(title)、產品價格(price)、商家id(companyId)。
以下示例采用slorj分組統計solr:
1、創建一個SolrServer
SolrServer server = new HttpSolrServer("http://127.0.0.1:2001/solr/product");
2、分組查詢
SolrQuery solrQuery = new SolrQuery("title:手機"); solrQuery.setParam("group", true);//是否分組 solrQuery.setParam("group.field", "companyId");//分組的域(此處以公司id進行分組) //solrQuery.setParam("group.query", "price:[0 TO 100]");//還可以根據其他條件進行過濾,如價格在1到100之間 solrQuery.setParam("group.limit", "10");//每組顯示的個數,默認為1 solrQuery.setParam("group.ngroups", true);//是否計算所得分組個數;注意:當每個分組顯示數目大於1個時,不能用分組數量來計算總頁碼 //solrQuery.setStart(0); //起始索引值 //solrQuery.setRows(100);//顯示幾條數據 QueryResponse resp = server.query(solrQuery); GroupResponse gresp = resp.getGroupResponse();//注意:此處不能再用resp.getResults()接收結果 List<GroupCommand> commands = gresp.getValues(); if(commands != null) { for(GroupCommand com : commands) { Sysout.out.println("總的分組個數:" + com.getNGroups().longValue()); for(Group group : com.getValues()) { SolrDocumentList hits = group.getResult(); for(SolrDocument doc : hits) { System.out.println("id: " + (String)doc.getFieldValue("id") + ", title: " + (String)doc.getFieldValue("title") + ", price: " + (Float)doc.getFieldValue("price")); } } } }
3、實際的應用
相信使用過淘寶搜索功能的人都會注意到一個細小卻又很重要的功能–“合並賣家”,如果使用solr就可以采用分組功能來實現。淘寶截圖:
本文出自 luoshengsha.com,歡迎轉載,轉載時請注明出處及相應鏈接。

