說到分組統計估計你們都不會陌生,就是數據庫的group by語句,可是當咱們採用solr4.5全文檢索時,數據庫提供再好的sql語句都沒有任何的意義了,那麼在solr4.5中咱們如何作到分組統計呢?其實很簡單,下面咱們來看看怎麼作。html
示例場景:sql
如今有個電子商務網站的產品搜索功能,不一樣的商家發佈不一樣的產品,咱們想經過關鍵詞「手機」去查找不一樣商家下面有多少有關手機的產品。假設索引庫的結構是產品id(id)、產品標題(title)、產品價格(price)、商家id(companyId)。數據庫
如下示例採用slorj分組統計solr:網站
一、建立一個SolrServerspa
SolrServer server = new HttpSolrServer("http://127.0.0.1:2001/solr/product");
二、分組查詢server
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")); } } } }
三、實際的應用htm
相信使用過淘寶搜索功能的人都會注意到一個細小卻又很重要的功能–「合併賣家」,若是使用solr就能夠採用分組功能來實現。淘寶截圖:索引
本文出自 luoshengsha.com,歡迎轉載,轉載時請註明出處及相應連接。get
本文永久連接: http://www.luoshengsha.com/319.html產品