solrJ的查询->统计【转】
1 package com.fjsh.SearchJobsFirst; 2 3 import java.text.SimpleDateFormat; 4 import java.util.Calendar; 5 import java.util.Date; 6 import java.util.GregorianCalendar; 7 import java.util.HashMap; 8 import java.util.Iterator; 9 import java.util.LinkedHashMap; 10 import java.util.List; 11 import java.util.Map; 12 import java.util.Map.Entry; 13 14 import javax.swing.RepaintManager; 15 import javax.swing.text.html.parser.Entity; 16 17 import org.apache.solr.client.solrj.SolrQuery; 18 import org.apache.solr.client.solrj.SolrServer; 19 import org.apache.solr.client.solrj.SolrServerException; 20 import org.apache.solr.client.solrj.impl.HttpSolrServer; 21 import org.apache.solr.client.solrj.response.FacetField; 22 import org.apache.solr.client.solrj.response.FacetField.Count; 23 import org.apache.solr.client.solrj.response.Group; 24 import org.apache.solr.client.solrj.response.GroupCommand; 25 import org.apache.solr.client.solrj.response.GroupResponse; 26 import org.apache.solr.client.solrj.response.QueryResponse; 27 import org.apache.solr.common.SolrDocument; 28 import org.apache.solr.common.SolrDocumentList; 29 import org.apache.solr.common.params.GroupParams; 30 import org.apache.solr.common.params.ModifiableSolrParams; 31 /** 32 * @Project JobsOtherWebSearch 33 * @Package com.fjsh.SearchJobsFirst 34 * @ClassName: SearchJobs 35 * @Author fjsh 36 * @Description: 对solr中的各个功能进行测试 37 * @Date 2014-3-5 下午3:38:09 38 */ 39 40 public class SearchJobs { 41 private static String url = "jdbc:sqlserver://192.168.2.106:1433;DatabaseName=JobsOtherweb51jobDB"; 42 private static String user = "sa"; 43 private static String password = "sa"; 44 private String Corenum; 45 public static int JobsId = 219443;// start jobsid 46 public SolrServer solrServer = null;// new 47 // HttpSolrServer("http://192.168.2.100:8080/solr/JobsOtherWeb1"); 48 49 // 1、 创建solrserver对象: 50 public SolrServer createSolrServer() { 51 HttpSolrServer solr = null; 52 try { 53 solr = new HttpSolrServer( 54 "http://192.168.2.106:8080/solr/JobsOtherWeb0"); 55 solr.setConnectionTimeout(100); 56 solr.setDefaultMaxConnectionsPerHost(100); 57 solr.setMaxTotalConnections(100); 58 } catch (Exception e) { 59 System.out.println("请检查tomcat服务器或端口是否开启!"); 60 e.printStackTrace(); 61 } 62 return solr; 63 } 64 65 // 简单的查询,取出二十个 66 public void querytop20() { 67 solrServer = createSolrServer(); 68 System.out.println("简单查询取出前二十个"); 69 String dtStart = new SimpleDateFormat("yyyyMMddHHmmssSSS") 70 .format(new Date()); 71 System.out.println("开始时间:" + dtStart + "\n"); 72 try { 73 SolrQuery query = new SolrQuery();// 查询 74 query.setQuery("jobsName:计算机"); 75 query.setRows(20); 76 SolrDocumentList docs = solrServer.query(query).getResults(); 77 for (SolrDocument sd : docs) { 78 System.out.println(sd.getFieldValue("jobsName")); 79 System.out.println(sd.getFieldValue("publishDate")); 80 } 81 solrServer.shutdown(); 82 String dtEnd = new SimpleDateFormat("yyyyMMddHHmmssSSS") 83 .format(new Date()); 84 System.out.println(query); 85 } catch (SolrServerException e) { 86 // TODO Auto-generated catch block 87 e.printStackTrace(); 88 } 89 } 90 91 // 删除索引 92 // 据查询结果删除: 93 public void DeleteByQuery() { 94 solrServer = createSolrServer(); 95 try { 96 // 删除所有的索引 97 solrServer.deleteByQuery("jobsName:高级技术支持"); 98 solrServer.commit(); 99 } catch (Exception e) { 100 e.printStackTrace(); 101 } 102 } 103 104 // 根据索引号删除索引: 105 public void DeleteByQueryJobsId() { 106 solrServer = createSolrServer(); 107 try { 108 solrServer.deleteById("515792"); 109 solrServer.commit(); 110 } catch (Exception e) { 111 e.printStackTrace(); 112 } 113 } 114 115 // 查询 116 // SolrJ提供的查询功能比较强大,可以进行结果中查询、范围查询、排序等。 117 // 补充一下范围查询的格式:[star t TO end],start与end是相应数据格式的值的字符串形式,“TO” 一定要保持大写! 118 /* 119 * field 查询的字段名称数组 key 查询的字段名称对应的值 start 查询的起始位置 count 一次查询出来的数量 sortfield 120 * 需要排序的字段数组 flag 需要排序的字段的排序方式如果为true 升序 如果为false 降序 hightlight 是否需要高亮显示 121 */ 122 public QueryResponse Search(String[] field, String[] key, int start, 123 int count, String[] sortfield, Boolean[] flag, Boolean hightlight) { 124 solrServer = createSolrServer(); 125 // 检测输入是否合法 126 if (null == field || null == key || field.length != key.length) { 127 return null; 128 } 129 if (null == sortfield || null == flag 130 || sortfield.length != flag.length) { 131 return null; 132 } 133 134 SolrQuery query = null; 135 try { 136 // 初始化查询对象 137 query = new SolrQuery(field[0] + ":" + key[0]); 138 for (int i = 0; i < field.length; i++) { 139 query.addFilterQuery(field[i] + ":" + key[i]); 140 } 141 // 设置起始位置与返回结果数 142 query.setStart(start); 143 query.setRows(count); 144 // 设置排序 145 for (int i = 0; i < sortfield.length; i++) { 146 if (flag[i]) { 147 query.addSortField(sortfield[i], SolrQuery.ORDER.asc); 148 } else { 149 query.addSortField(sortfield[i], SolrQuery.ORDER.desc); 150 } 151 } 152 // 设置高亮 153 if (null != hightlight) { 154 query.setHighlight(true); // 开启高亮组件 155 query.addHighlightField("jobsName");// 高亮字段 156 query.setHighlightSimplePre("<font color=\"red\">");// 标记 157 query.setHighlightSimplePost("</font>"); 158 query.setHighlightSnippets(1);// 结果分片数,默认为1 159 query.setHighlightFragsize(1000);// 每个分片的最大长度,默认为100 160 161 } 162 } catch (Exception e) { 163 e.printStackTrace(); 164 } 165 166 QueryResponse rsp = null; 167 try { 168 rsp = solrServer.query(query); 169 } catch (Exception e) { 170 e.printStackTrace(); 171 return null; 172 } 173 // 返回查询结果 174 return rsp; 175 } 176 177 // Facet的一个应用:自动补全 178 // prefix为前缀,min为最大返回结果数 179 // field需要查询并返回不全的字段,prefix需要查询并返回的字段不全值 180 181 public String[] autoComplete(String field, String prefix, int min) { 182 /*------------第一处标记------------------------*/ 183 solrServer = createSolrServer(); 184 String words[] = null; 185 StringBuffer sb = new StringBuffer(""); 186 SolrQuery query = new SolrQuery(field + ":" + prefix); 187 QueryResponse rsp = new QueryResponse(); 188 // Facet为solr中的层次分类查询 189 /*------------第二处标记:程序从第一处标记执行到这里需要300ms所以将上面的代码进行实例化最好------------------------*/ 190 try { 191 query.setFacet(true); 192 // query.setQuery("*:*"); 193 query = new SolrQuery(field + ":" + prefix); 194 query.setFacetPrefix(prefix); 195 query.addFacetField(field); 196 rsp = solrServer.query(query); 197 /*------------第三处标记:程序从第二处标记执行到这里需要200ms但此处很难再进行优化,由于查询的复杂性------------------------*/ 198 } catch (Exception e) { 199 // TODO: handle exception 200 e.printStackTrace(); 201 return null; 202 } 203 if (null != rsp) { 204 FacetField ff = rsp.getFacetField(field); 205 List<Count> countList = ff.getValues(); 206 if (null == countList) { 207 return null; 208 } 209 for (int i = 0; i < countList.size(); i++) { 210 String tmp[] = countList.get(i).toString().split(" "); 211 // 排除单个字 212 if (tmp[0].length() < 2) { 213 continue; 214 } 215 sb.append(tmp[0] + " "); 216 min--; 217 if (min == 0) { 218 break; 219 } 220 } 221 words = sb.toString().split(" "); 222 } else { 223 return null; 224 } 225 return words; 226 } 227 /** 228 * @Author fjsh 229 * @Title SearchGroup 230 * @Description 按group进行查找 231 * @param QUERY_CONTENT 查询内容 232 * @param QUERY_ROWS 查找的数量,默认是10 233 * @param GROUP true or false 是否按group查询 234 * @param GROUP_FIELD 查询field 235 * @param GROUP_LIMIT The number of results (documents) to return for each group. Defaults to 1 236 * @Return void 237 * @Throws 238 * @Date 2014-5-7 239 * 输出结果的时候,由于定义的数据索引没有做很好是调整,显示的结果并不理想,不过此方法可以作为参考 240 */ 241 public void SearchGroup(String QUERY_CONTENT,int QUERY_ROWS, Boolean GROUP, String GROUP_FIELD,String GROUP_LIMIT) { 242 SolrServer server = createSolrServer(); 243 SolrQuery param = new SolrQuery(); 244 param.setQuery("jobsName:"+QUERY_CONTENT); 245 param.setRows(QUERY_ROWS); 246 param.setParam(GroupParams.GROUP, GROUP); 247 param.setParam(GroupParams.GROUP_FIELD, GROUP_FIELD); 248 param.setParam(GroupParams.GROUP_LIMIT, GROUP_LIMIT); 249 QueryResponse response = null; 250 try { 251 response = server.query(param); 252 } catch (SolrServerException e) { 253 // logger.error(e.getMessage(), e); 254 } 255 Map<String, Integer> info = new HashMap<String, Integer>(); 256 GroupResponse groupResponse = response.getGroupResponse(); 257 if(groupResponse != null) { 258 List<GroupCommand> groupList = groupResponse.getValues(); 259 for(GroupCommand groupCommand : groupList) { 260 List<Group> groups = groupCommand.getValues(); 261 for(Group group : groups) { 262 info.put(group.getGroupValue(), (int)group.getResult().getNumFound()); 263 System.out.println(group.getGroupValue()+"---"+group.getResult().getNumFound()); 264 } 265 } 266 } 267 } 268 269 /* 270 * 介绍了一下facet之后,来说说怎么实现facet。facet的实现其实很简单,主要在搜索参数上带上就OK。 271 * 272 * facet=on/true #代表开启facet facet.field=cate #代表要统计的面(分组),比如上面的分类,品牌,可以多次出现 273 * facet.limit =20 #每个分组最多返回条数 facet.mincount = 1 #这个表示分组下某一条目的最小数据量 274 * facet.missing = on/true #统计null的值 facet.method = #默认为fc, fc表示Field Cache 275 * 比如 276 * :http://localhost/product/select/?q=铁观音&facet=on&facet.field=category&facet 277 * .field=brand&facet.mincount=1在搜索结果中返回xml的facet结果 278 * 279 * 280 * view sourceprint? 01 <lst name="facet_counts"> 02 <lst 281 * name="facet_queries"/> 03 <lst name="facet_fields"> 04 <lst 282 * name="category"> 05 <int name="2742">64</int> 06 <int name="793">48</int> 283 * 07 <int name="2741">12</int> 08 <int name="801">6</int> 09 <int 284 * name="1087">1</int> 10 </lst> 11 <lst name="brand"> 12 <int 285 * name="229">74</int> 13 <int name="227">16</int> 14 <int 286 * name="270">13</int> 15 <int name="317">10</int> 16 <int name="0">4</int> 287 * 17 <int name="165">4</int> 18 <int name="203">3</int> 19 <int 288 * name="147">2</int> 20 <int name="166">2</int> 21 <int name="217">1</int> 289 * 22 <int name="342">1</int> 23 <int name="343">1</int> 24 </lst> 25 </lst> 290 * <lst name="category"> 分组名 <int name="2742">64</int> 291 * 分组内条目,name表示条目,64是统计结果数。 292 * 293 * 294 * 295 * 296 * Date Facet 日期类型的字段在文档中很常见 , 如商品上市时间 , 货物出仓时间 , 书籍上架时间等等 . 某些情况下需要针对这些字段进行 297 * Facet. 不过时间字段的取值有无限性 , 用户往往关心的不是某个时间点而是某个时间段内的查询统计结果 . Solr 298 * 为日期字段提供了更为方便的查询统计方式 . 当然 , 字段的类型必须是 DateField( 或其子类型 ). 需要注意的是 , 使用 Date 299 * Facet 时 , 字段名 , 起始时间 , 结束时间 , 时间间隔这 4 个参数都必须提供 . 与 Field Facet 类似 ,Date 300 * Facet 也可以对多个字段进行 Facet. 并且针对每个字段都可以单独设置参数 . 2.1 facet.date 该参数表示需要进行 Date 301 * Facet 的字段名 , 与 facet.field 一样 , 该参数可以被设置多次 , 表示对多个字段进行 Date Facet. 2.2 302 * facet.date.start 起始时间 , 时间的一般格式为 ” 1995-12-31T23:59:59Z”, 另外可以使用 303 * ”NOW”,”YEAR”,”MONTH” 等等 , 具体格式可以参考 org.apache.solr.schema. DateField 的 304 * java doc. 2.3 facet.date.end 结束时间 . 2.4 facet.date.gap 时间间隔 . 如果 start 为 305 * 2009-1-1,end 为 2010-1-1.gap 设置为 ”+1MONTH” 表示间隔 1 个月 , 那么将会把这段时间划分为 12 306 * 个间隔段 . 注意 ”+” 因为是特殊字符所以应该用 ”%2B” 代替 . 2.5 facet.date.hardend 取值可以为 307 * true|false, 默认为 false. 它表示 gap 迭代到 end 处采用何种处理 . 举例说明 start 为 308 * 2009-1-1,end 为 2009-12-25,gap 为 ”+1MONTH”,hardend 为 false 的话最后一个时间段为 309 * 2009-12-1 至 2010-1-1;hardend 为 true 的话最后一个时间段为 2009-12-1 至 2009-12-25. 310 * 2.6 facet.date.other 取值范围为 before|after|between|none|all, 默认为 none. 311 * before 会对 start 之前的值做统计 . after 会对 end 之后的值做统计 . between 会对 start 至 end 312 * 之间所有值做统计 . 如果 hardend 为 true 的话 , 那么该值就是各个时间段统计值的和 . none 表示该项禁用 . all 表示 313 * before,after,all 都会统计 . 举例 : &facet=on &facet.date=date 314 * &facet.date.start=2009-1-1T0:0:0Z &facet.date.end=2010-1-1T0:0:0Z 315 * &facet.date.gap=%2B1MONTH &facet.date.other=all 316 */ 317 public void FacetFieldQuery() throws Exception { 318 solrServer = createSolrServer(); 319 SolrQuery query = new SolrQuery();// 建立一个新的查询 320 query.setQuery("jobsName:计算机维护"); 321 query.setFacet(true);// 设置facet=on 322 // 分类信息分为:薪水,发布时间,教育背景,工作经验,公司类型,工作类型 323 query.addFacetField(new String[] { "salary", "publishDate", 324 "educateBackground", "jobExperience", "companytype", "jobsType" });// 设置需要facet的字段 325 query.setFacetLimit(10);// 限制facet返回的数量 326 query.setFacetMissing(false);// 不统计null的值 327 query.setFacetMinCount(1);// 设置返回的数据中每个分组的数据最小值,比如设置为1,则统计数量最小为1,不然不显示 328 329 // query.addFacetQuery("publishDate:[2014-04-11T00:00:00Z TO 2014-04-13T00:00:00Z]"); 330 QueryResponse response = solrServer.query(query); 331 System.out.println("查询时间:" + response.getQTime()); 332 List<FacetField> facets = response.getFacetFields();// 返回的facet列表 333 for (FacetField facet : facets) { 334 System.out.println(facet.getName()); 335 System.out.println("----------------"); 336 List<Count> counts = facet.getValues(); 337 for (Count count : counts) { 338 System.out.println(count.getName() + ":" + count.getCount()); 339 } 340 System.out.println(); 341 } 342 343 } 344 345 // 时间片使用方法 346 public void FacetFieldQueryDate() throws Exception { 347 solrServer = createSolrServer(); 348 SolrQuery query = new SolrQuery();// 建立一个新的查询 349 query.setQuery("jobsName:计算"); 350 query.setFacet(true);// 设置facet=on 351 query.setFacetLimit(10);// 限制facet返回的数量 352 query.setFacetMissing(false);// 不统计null的值 353 query.setFacetMinCount(1);// 设置返回的数据中每个分组的数据最小值,比如设置为1,则统计数量最小为1,不然不显示 354 query.addFacetField(new String[] { "salary", "educateBackground", 355 "jobExperience", "companytype", "jobsType" });// 设置需要facet的字段 356 // query.addFacetQuery("publishDate:[2014-04-21T00:00:00Z TO 2014-04-23T00:00:00Z]"); 357 // query.addFacetQuery("publishDate:[2014-04-11T00:00:00Z TO 2014-04-13T00:00:00Z]"); 358 SimpleDateFormat time0 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 359 SimpleDateFormat time1 = new SimpleDateFormat("yyyy-MM-dd"); 360 SimpleDateFormat time2 = new SimpleDateFormat("HH:mm:ss"); 361 // return 362 // date.getYear()+"-"+date.getMonth()+"-"+date.getDay()+"T"+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds(); 363 364 Calendar c = Calendar.getInstance(); 365 c.setTime(time0.parse(time1.format(c.getTime()) + " 23:59:59")); 366 Date date = c.getTime(); 367 String dateNow = time1.format(date) + "T" + time2.format(date) + "Z"; 368 c.setTime(time0.parse(time1.format(c.getTime()) + " 23:59:59")); 369 c.add(Calendar.DATE, -1); 370 date = c.getTime(); 371 // 当天 372 query.addFacetQuery("publishDate:[" + time1.format(date) + "T" 373 + time2.format(date) + "Z" + " TO " + dateNow + "]"); 374 c.add(Calendar.DATE, -2); 375 date = c.getTime(); 376 // 前三天 377 query.addFacetQuery("publishDate:[" + time1.format(date) + "T" 378 + time2.format(date) + "Z" + " TO " + dateNow + "]"); 379 c.add(Calendar.DATE, -4); 380 date = c.getTime(); 381 // 前一周 382 query.addFacetQuery("publishDate:[" + time1.format(date) + "T" 383 + time2.format(date) + "Z" + " TO " + dateNow + "]"); 384 c.add(Calendar.DATE, -7); 385 date = c.getTime(); 386 // 前两周 387 query.addFacetQuery("publishDate:[" + time1.format(date) + "T" 388 + time2.format(date) + "Z" + " TO " + dateNow + "]"); 389 c.add(Calendar.DATE, -16); 390 date = c.getTime(); 391 // 前一个月 392 query.addFacetQuery("publishDate:[" + time1.format(date) + "T" 393 + time2.format(date) + "Z" + " TO " + dateNow + "]"); 394 c.add(Calendar.DATE, -30); 395 date = c.getTime(); 396 // 前两个月 397 query.addFacetQuery("publishDate:[" + time1.format(date) + "T" 398 + time2.format(date) + "Z" + " TO " + dateNow + "]"); 399 400 QueryResponse response = solrServer.query(query); 401 System.out.println("查询时间:" + response.getQTime()); 402 List<FacetField> facets = response.getFacetFields();// 返回的facet列表 403 for (FacetField facet : facets) { 404 System.out.println(facet.getName()); 405 System.out.println("----------------"); 406 List<Count> counts = facet.getValues(); 407 for (Count count : counts) { 408 System.out.println(count.getName() + ":" + count.getCount()); 409 } 410 System.out.println(); 411 } 412 // 根据时间段来获取数据 413 Map<String, Integer> maps = response.getFacetQuery(); 414 for (Entry<String, Integer> entry : maps.entrySet()) { 415 System.out.println(entry.getKey() + ":" + entry.getValue()); 416 } 417 418 } 419 420 // 最终使用的查询方式 421 // SolrJ提供的查询功能比较强大,可以进行结果中查询、范围查询、排序等。 422 // 补充一下范围查询的格式:[star t TO end],start与end是相应数据格式的值的字符串形式,“TO” 一定要保持大写! 423 /* 424 * field 查询的字段名称数组 key 查询的字段名称对应的值 start 查询的起始位置 count 一次查询出来的数量 sortfield 425 * 需要排序的字段数组 flag 需要排序的字段的排序方式如果为true 升序 如果为false 降序 hightlight 是否需要高亮显示 426 */ 427 public QueryResponse searchResult(String[] field, String[] key, int start, 428 int count, String[] sortfield, Boolean[] flag, Boolean hightlight) 429 throws Exception { 430 solrServer = createSolrServer(); 431 // 检测输入是否合法 432 if (null == field || null == key || field.length != key.length) { 433 return null; 434 } 435 436 437 SolrQuery query = null; 438 try { 439 // 初始化查询对象 440 query = new SolrQuery(field[0] + ":" + key[0]); 441 for (int i = 0; i < field.length; i++) { 442 query.addFilterQuery(field[i] + ":" + key[i]); 443 } 444 // 设置起始位置与返回结果数 445 query.setStart(start); 446 query.setRows(count); 447 // 设置排序 448 if (!(null == sortfield || null == flag 449 || sortfield.length != flag.length)) { 450 for (int i = 0; i < sortfield.length; i++) { 451 if (flag[i]) { 452 query.addSortField(sortfield[i], SolrQuery.ORDER.asc); 453 } else { 454 query.addSortField(sortfield[i], SolrQuery.ORDER.desc); 455 } 456 } 457 } 458 459 // 设置高亮 460 if (null != hightlight) { 461 query.setHighlight(true); // 开启高亮组件 462 query.addHighlightField("jobsName");// 高亮字段 463 query.setHighlightSimplePre("<font color=\"red\">");// 标记 464 query.setHighlightSimplePost("</font>"); 465 query.setHighlightSnippets(1);// 结果分片数,默认为1 466 query.setHighlightFragsize(1000);// 每个分片的最大长度,默认为100 467 468 } 469 } catch (Exception e) { 470 e.printStackTrace(); 471 } 472 query.setFacet(true);// 设置facet=on 473 query.setFacetLimit(10);// 限制facet返回的数量 474 query.setFacetMissing(false);// 不统计null的值 475 query.setFacetMinCount(1);// 设置返回的数据中每个分组的数据最小值,比如设置为1,则统计数量最小为1,不然不显示 476 query.addFacetField(new String[] { "salary", "educateBackground", 477 "jobExperience", "companytype", "jobsType" });// 设置需要facet的字段 478 // query.addFacetQuery("publishDate:[2014-04-21T00:00:00Z TO 2014-04-23T00:00:00Z]"); 479 // query.addFacetQuery("publishDate:[2014-04-11T00:00:00Z TO 2014-04-13T00:00:00Z]"); 480 SimpleDateFormat time0 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 481 SimpleDateFormat time1 = new SimpleDateFormat("yyyy-MM-dd"); 482 SimpleDateFormat time2 = new SimpleDateFormat("HH:mm:ss"); 483 // return 484 // date.getYear()+"-"+date.getMonth()+"-"+date.getDay()+"T"+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds(); 485 486 Calendar c = Calendar.getInstance(); 487 c.setTime(time0.parse(time1.format(c.getTime()) + " 23:59:59")); 488 Date date = c.getTime(); 489 String dateNow = time1.format(date) + "T" + time2.format(date) + "Z"; 490 c.setTime(time0.parse(time1.format(c.getTime()) + " 23:59:59")); 491 c.add(Calendar.DATE, -1); 492 date = c.getTime(); 493 // 当天 494 query.addFacetQuery("publishDate:[" + time1.format(date) + "T" 495 + time2.format(date) + "Z" + " TO " + dateNow + "]"); 496 c.add(Calendar.DATE, -2); 497 date = c.getTime(); 498 // 前三天 499 query.addFacetQuery("publishDate:[" + time1.format(date) + "T" 500 + time2.format(date) + "Z" + " TO " + dateNow + "]"); 501 c.add(Calendar.DATE, -4); 502 date = c.getTime(); 503 // 前一周 504 query.addFacetQuery("publishDate:[" + time1.format(date) + "T" 505 + time2.format(date) + "Z" + " TO " + dateNow + "]"); 506 c.add(Calendar.DATE, -7); 507 date = c.getTime(); 508 // 前两周 509 query.addFacetQuery("publishDate:[" + time1.format(date) + "T" 510 + time2.format(date) + "Z" + " TO " + dateNow + "]"); 511 c.add(Calendar.DATE, -16); 512 date = c.getTime(); 513 // 前一个月 514 query.addFacetQuery("publishDate:[" + time1.format(date) + "T" 515 + time2.format(date) + "Z" + " TO " + dateNow + "]"); 516 c.add(Calendar.DATE, -30); 517 date = c.getTime(); 518 // 前两个月 519 query.addFacetQuery("publishDate:[" + time1.format(date) + "T" 520 + time2.format(date) + "Z" + " TO " + dateNow + "]"); 521 522 QueryResponse rsp = null; 523 try { 524 rsp = solrServer.query(query); 525 System.out.println("此次查询时间qtime :" + rsp.getQTime()); 526 List<FacetField> facets = rsp.getFacetFields();// 返回的facet列表 527 for (FacetField facet : facets) { 528 System.out.println(facet.getName()); 529 System.out.println("----------------"); 530 List<Count> counts = facet.getValues(); 531 for (Count countitem : counts) { 532 System.out.println(countitem.getName() + ":" 533 + countitem.getCount()); 534 } 535 System.out.println(); 536 } 537 // 根据时间段来获取数据 538 Map<String, Integer> maps = rsp.getFacetQuery(); 539 for (Entry<String, Integer> entry : maps.entrySet()) { 540 System.out.println(entry.getKey() + ":" + entry.getValue()); 541 } 542 // 获取返回的结果 543 SolrDocumentList docs = rsp.getResults(); 544 for (SolrDocument doc : docs) { 545 System.out.println("-----"); 546 System.out.println(doc.getFieldValue("jobsName")); 547 System.out.println(doc.getFieldValue("publishDate")); 548 549 } 550 } catch (Exception e) { 551 e.printStackTrace(); 552 return null; 553 } 554 // 返回查询结果 555 return rsp; 556 } 557 }
北卿~~~~