solr在使用solrj操作中的各个操作大全(在solrcores中测试)

package com.fjsh.SearchJobsFirst;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.swing.RepaintManager;
import javax.swing.text.html.parser.Entity;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.FacetField;
import org.apache.solr.client.solrj.response.FacetField.Count;
import org.apache.solr.client.solrj.response.Group;
import org.apache.solr.client.solrj.response.GroupCommand;
import org.apache.solr.client.solrj.response.GroupResponse;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.params.GroupParams;
import org.apache.solr.common.params.ModifiableSolrParams;
/**
 * @Project JobsOtherWebSearch
 * @Package com.fjsh.SearchJobsFirst
 * @ClassName: SearchJobs 
 * @Author fjsh
 * @Description: 对solr中的各个功能进行测试
 * @Date 2014-3-5 下午3:38:09 
 */

public class SearchJobs {
	private static String url = "jdbc:sqlserver://192.168.2.106:1433;DatabaseName=JobsOtherweb51jobDB";
	private static String user = "sa";
	private static String password = "sa";
	private String Corenum;
	public static int JobsId = 219443;// start jobsid
	public SolrServer solrServer = null;// new
										// HttpSolrServer("http://192.168.2.100:8080/solr/JobsOtherWeb1");

	// 1、 创建solrserver对象:
	public SolrServer createSolrServer() {
		HttpSolrServer solr = null;
		try {
			solr = new HttpSolrServer(
					"http://192.168.2.106:8080/solr/JobsOtherWeb0");
			solr.setConnectionTimeout(100);
			solr.setDefaultMaxConnectionsPerHost(100);
			solr.setMaxTotalConnections(100);
		} catch (Exception e) {
			System.out.println("请检查tomcat服务器或端口是否开启!");
			e.printStackTrace();
		}
		return solr;
	}

	// 简单的查询,取出二十个
	public void querytop20() {
		solrServer = createSolrServer();
		System.out.println("简单查询取出前二十个");
		String dtStart = new SimpleDateFormat("yyyyMMddHHmmssSSS")
				.format(new Date());
		System.out.println("开始时间:" + dtStart + "\n");
		try {
			SolrQuery query = new SolrQuery();// 查询
			query.setQuery("jobsName:计算机");
			query.setRows(20);
			SolrDocumentList docs = solrServer.query(query).getResults();
			for (SolrDocument sd : docs) {
				System.out.println(sd.getFieldValue("jobsName"));
				System.out.println(sd.getFieldValue("publishDate"));
			}
			solrServer.shutdown();
			String dtEnd = new SimpleDateFormat("yyyyMMddHHmmssSSS")
					.format(new Date());
			System.out.println(query);
		} catch (SolrServerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	// 删除索引
	// 据查询结果删除:
	public void DeleteByQuery() {
		solrServer = createSolrServer();
		try {
			// 删除所有的索引
			solrServer.deleteByQuery("jobsName:高级技术支持");
			solrServer.commit();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 根据索引号删除索引:
	public void DeleteByQueryJobsId() {
		solrServer = createSolrServer();
		try {
			solrServer.deleteById("515792");
			solrServer.commit();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 查询
	// SolrJ提供的查询功能比较强大,可以进行结果中查询、范围查询、排序等。
	// 补充一下范围查询的格式:[star t TO end],start与end是相应数据格式的值的字符串形式,“TO” 一定要保持大写!
	/*
	 * field 查询的字段名称数组 key 查询的字段名称对应的值 start 查询的起始位置 count 一次查询出来的数量 sortfield
	 * 需要排序的字段数组 flag 需要排序的字段的排序方式如果为true 升序 如果为false 降序 hightlight 是否需要高亮显示
	 */
	public QueryResponse Search(String[] field, String[] key, int start,
			int count, String[] sortfield, Boolean[] flag, Boolean hightlight) {
		solrServer = createSolrServer();
		// 检测输入是否合法
		if (null == field || null == key || field.length != key.length) {
			return null;
		}
		if (null == sortfield || null == flag
				|| sortfield.length != flag.length) {
			return null;
		}

		SolrQuery query = null;
		try {
			// 初始化查询对象
			query = new SolrQuery(field[0] + ":" + key[0]);
			for (int i = 0; i < field.length; i++) {
				query.addFilterQuery(field[i] + ":" + key[i]);
			}
			// 设置起始位置与返回结果数
			query.setStart(start);
			query.setRows(count);
			// 设置排序
			for (int i = 0; i < sortfield.length; i++) {
				if (flag[i]) {
					query.addSortField(sortfield[i], SolrQuery.ORDER.asc);
				} else {
					query.addSortField(sortfield[i], SolrQuery.ORDER.desc);
				}
			}
			// 设置高亮
			if (null != hightlight) {
				query.setHighlight(true); // 开启高亮组件
				query.addHighlightField("jobsName");// 高亮字段
				query.setHighlightSimplePre("<font color=\"red\">");// 标记
				query.setHighlightSimplePost("</font>");
				query.setHighlightSnippets(1);// 结果分片数,默认为1
				query.setHighlightFragsize(1000);// 每个分片的最大长度,默认为100

			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		QueryResponse rsp = null;
		try {
			rsp = solrServer.query(query);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		// 返回查询结果
		return rsp;
	}

	// Facet的一个应用:自动补全
	// prefix为前缀,min为最大返回结果数
	// field需要查询并返回不全的字段,prefix需要查询并返回的字段不全值

	public String[] autoComplete(String field, String prefix, int min) {
		/*------------第一处标记------------------------*/
		solrServer = createSolrServer();
		String words[] = null;
		StringBuffer sb = new StringBuffer("");
		SolrQuery query = new SolrQuery(field + ":" + prefix);
		QueryResponse rsp = new QueryResponse();
		// Facet为solr中的层次分类查询
		/*------------第二处标记:程序从第一处标记执行到这里需要300ms所以将上面的代码进行实例化最好------------------------*/
		try {
			query.setFacet(true);
			// query.setQuery("*:*");
			query = new SolrQuery(field + ":" + prefix);
			query.setFacetPrefix(prefix);
			query.addFacetField(field);
			rsp = solrServer.query(query);
			/*------------第三处标记:程序从第二处标记执行到这里需要200ms但此处很难再进行优化,由于查询的复杂性------------------------*/
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			return null;
		}
		if (null != rsp) {
			FacetField ff = rsp.getFacetField(field);
			List<Count> countList = ff.getValues();
			if (null == countList) {
				return null;
			}
			for (int i = 0; i < countList.size(); i++) {
				String tmp[] = countList.get(i).toString().split(" ");
				// 排除单个字
				if (tmp[0].length() < 2) {
					continue;
				}
				sb.append(tmp[0] + " ");
				min--;
				if (min == 0) {
					break;
				}
			}
			words = sb.toString().split(" ");
		} else {
			return null;
		}
		return words;
	}
	/**
	 * @Author fjsh
	 * @Title SearchGroup
	 * @Description 按group进行查找
	 * @param QUERY_CONTENT 查询内容
	 * @param QUERY_ROWS 查找的数量,默认是10
	 * @param GROUP true or false 是否按group查询
	 * @param GROUP_FIELD 查询field
	 * @param GROUP_LIMIT The number of results (documents) to return for each group. Defaults to 1
	 * @Return void
	 * @Throws
	 * @Date 2014-5-7
	 * 输出结果的时候,由于定义的数据索引没有做很好是调整,显示的结果并不理想,不过此方法可以作为参考
	 */
	public void SearchGroup(String QUERY_CONTENT,int QUERY_ROWS, Boolean GROUP, String GROUP_FIELD,String GROUP_LIMIT) {
		 SolrServer server = createSolrServer();
		 SolrQuery param = new SolrQuery();
		 param.setQuery("jobsName:"+QUERY_CONTENT);
		 param.setRows(QUERY_ROWS);
		 param.setParam(GroupParams.GROUP, GROUP);
		 param.setParam(GroupParams.GROUP_FIELD, GROUP_FIELD);
		 param.setParam(GroupParams.GROUP_LIMIT, GROUP_LIMIT);
		 QueryResponse response = null;
		 try {
		     response = server.query(param);
		 } catch (SolrServerException e) {
		    // logger.error(e.getMessage(), e);
		 }
		 Map<String, Integer> info = new HashMap<String, Integer>();
		 GroupResponse groupResponse = response.getGroupResponse();
		 if(groupResponse != null) {
		     List<GroupCommand> groupList = groupResponse.getValues();
		     for(GroupCommand groupCommand : groupList) {
		         List<Group> groups = groupCommand.getValues();
		         for(Group group : groups) {
		             info.put(group.getGroupValue(), (int)group.getResult().getNumFound());
		             System.out.println(group.getGroupValue()+"---"+group.getResult().getNumFound());
		         }
		     }
		 }
	}

	/*
	 * 介绍了一下facet之后,来说说怎么实现facet。facet的实现其实很简单,主要在搜索参数上带上就OK。
	 *
	 * facet=on/true #代表开启facet facet.field=cate #代表要统计的面(分组),比如上面的分类,品牌,可以多次出现
	 * facet.limit =20 #每个分组最多返回条数 facet.mincount = 1 #这个表示分组下某一条目的最小数据量
	 * facet.missing = on/true #统计null的值 facet.method = #默认为fc, fc表示Field Cache
	 * 比如
	 * :http://localhost/product/select/?q=铁观音&facet=on&facet.field=category&facet
	 * .field=brand&facet.mincount=1在搜索结果中返回xml的facet结果
	 *
	 *
	 * view sourceprint? 01 <lst name="facet_counts"> 02 <lst
	 * name="facet_queries"/> 03 <lst name="facet_fields"> 04 <lst
	 * name="category"> 05 <int name="2742">64</int> 06 <int name="793">48</int>
	 * 07 <int name="2741">12</int> 08 <int name="801">6</int> 09 <int
	 * name="1087">1</int> 10 </lst> 11 <lst name="brand"> 12 <int
	 * name="229">74</int> 13 <int name="227">16</int> 14 <int
	 * name="270">13</int> 15 <int name="317">10</int> 16 <int name="0">4</int>
	 * 17 <int name="165">4</int> 18 <int name="203">3</int> 19 <int
	 * name="147">2</int> 20 <int name="166">2</int> 21 <int name="217">1</int>
	 * 22 <int name="342">1</int> 23 <int name="343">1</int> 24 </lst> 25 </lst>
	 * <lst name="category"> 分组名 <int name="2742">64</int>
	 * 分组内条目,name表示条目,64是统计结果数。
	 *
	 *
	 *
	 *
	 * Date Facet 日期类型的字段在文档中很常见 , 如商品上市时间 , 货物出仓时间 , 书籍上架时间等等 . 某些情况下需要针对这些字段进行
	 * Facet. 不过时间字段的取值有无限性 , 用户往往关心的不是某个时间点而是某个时间段内的查询统计结果 . Solr
	 * 为日期字段提供了更为方便的查询统计方式 . 当然 , 字段的类型必须是 DateField( 或其子类型 ). 需要注意的是 , 使用 Date
	 * Facet 时 , 字段名 , 起始时间 , 结束时间 , 时间间隔这 4 个参数都必须提供 . 与 Field Facet 类似 ,Date
	 * Facet 也可以对多个字段进行 Facet. 并且针对每个字段都可以单独设置参数 . 2.1 facet.date 该参数表示需要进行 Date
	 * Facet 的字段名 , 与 facet.field 一样 , 该参数可以被设置多次 , 表示对多个字段进行 Date Facet. 2.2
	 * facet.date.start 起始时间 , 时间的一般格式为 ” 1995-12-31T23:59:59Z”, 另外可以使用
	 * ”NOW”,”YEAR”,”MONTH” 等等 , 具体格式可以参考 org.apache.solr.schema. DateField 的
	 * java doc. 2.3 facet.date.end 结束时间 . 2.4 facet.date.gap 时间间隔 . 如果 start 为
	 * 2009-1-1,end 为 2010-1-1.gap 设置为 ”+1MONTH” 表示间隔 1 个月 , 那么将会把这段时间划分为 12
	 * 个间隔段 . 注意 ”+” 因为是特殊字符所以应该用 ”%2B” 代替 . 2.5 facet.date.hardend 取值可以为
	 * true|false, 默认为 false. 它表示 gap 迭代到 end 处采用何种处理 . 举例说明 start 为
	 * 2009-1-1,end 为 2009-12-25,gap 为 ”+1MONTH”,hardend 为 false 的话最后一个时间段为
	 * 2009-12-1 至 2010-1-1;hardend 为 true 的话最后一个时间段为 2009-12-1 至 2009-12-25.
	 * 2.6 facet.date.other 取值范围为 before|after|between|none|all, 默认为 none.
	 * before 会对 start 之前的值做统计 . after 会对 end 之后的值做统计 . between 会对 start 至 end
	 * 之间所有值做统计 . 如果 hardend 为 true 的话 , 那么该值就是各个时间段统计值的和 . none 表示该项禁用 . all 表示
	 * before,after,all 都会统计 . 举例 : &facet=on &facet.date=date
	 * &facet.date.start=2009-1-1T0:0:0Z &facet.date.end=2010-1-1T0:0:0Z
	 * &facet.date.gap=%2B1MONTH &facet.date.other=all
	 */
	public void FacetFieldQuery() throws Exception {
		solrServer = createSolrServer();
		SolrQuery query = new SolrQuery();// 建立一个新的查询
		query.setQuery("jobsName:计算机维护");
		query.setFacet(true);// 设置facet=on
		// 分类信息分为:薪水,发布时间,教育背景,工作经验,公司类型,工作类型
		query.addFacetField(new String[] { "salary", "publishDate",
				"educateBackground", "jobExperience", "companytype", "jobsType" });// 设置需要facet的字段
		query.setFacetLimit(10);// 限制facet返回的数量
		query.setFacetMissing(false);// 不统计null的值
		query.setFacetMinCount(1);// 设置返回的数据中每个分组的数据最小值,比如设置为1,则统计数量最小为1,不然不显示

		// query.addFacetQuery("publishDate:[2014-04-11T00:00:00Z TO 2014-04-13T00:00:00Z]");
		QueryResponse response = solrServer.query(query);
		System.out.println("查询时间:" + response.getQTime());
		List<FacetField> facets = response.getFacetFields();// 返回的facet列表
		for (FacetField facet : facets) {
			System.out.println(facet.getName());
			System.out.println("----------------");
			List<Count> counts = facet.getValues();
			for (Count count : counts) {
				System.out.println(count.getName() + ":" + count.getCount());
			}
			System.out.println();
		}

	}

	// 时间片使用方法
	public void FacetFieldQueryDate() throws Exception {
		solrServer = createSolrServer();
		SolrQuery query = new SolrQuery();// 建立一个新的查询
		query.setQuery("jobsName:计算");
		query.setFacet(true);// 设置facet=on
		query.setFacetLimit(10);// 限制facet返回的数量
		query.setFacetMissing(false);// 不统计null的值
		query.setFacetMinCount(1);// 设置返回的数据中每个分组的数据最小值,比如设置为1,则统计数量最小为1,不然不显示
		query.addFacetField(new String[] { "salary", "educateBackground",
				"jobExperience", "companytype", "jobsType" });// 设置需要facet的字段
		// query.addFacetQuery("publishDate:[2014-04-21T00:00:00Z TO 2014-04-23T00:00:00Z]");
		// query.addFacetQuery("publishDate:[2014-04-11T00:00:00Z TO 2014-04-13T00:00:00Z]");
		SimpleDateFormat time0 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		SimpleDateFormat time1 = new SimpleDateFormat("yyyy-MM-dd");
		SimpleDateFormat time2 = new SimpleDateFormat("HH:mm:ss");
		// return
		// date.getYear()+"-"+date.getMonth()+"-"+date.getDay()+"T"+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds();

		Calendar c = Calendar.getInstance();
		c.setTime(time0.parse(time1.format(c.getTime()) + " 23:59:59"));
		Date date = c.getTime();
		String dateNow = time1.format(date) + "T" + time2.format(date) + "Z";
		c.setTime(time0.parse(time1.format(c.getTime()) + " 23:59:59"));
		c.add(Calendar.DATE, -1);
		date = c.getTime();
		// 当天
		query.addFacetQuery("publishDate:[" + time1.format(date) + "T"
				+ time2.format(date) + "Z" + " TO " + dateNow + "]");
		c.add(Calendar.DATE, -2);
		date = c.getTime();
		// 前三天
		query.addFacetQuery("publishDate:[" + time1.format(date) + "T"
				+ time2.format(date) + "Z" + " TO " + dateNow + "]");
		c.add(Calendar.DATE, -4);
		date = c.getTime();
		// 前一周
		query.addFacetQuery("publishDate:[" + time1.format(date) + "T"
				+ time2.format(date) + "Z" + " TO " + dateNow + "]");
		c.add(Calendar.DATE, -7);
		date = c.getTime();
		// 前两周
		query.addFacetQuery("publishDate:[" + time1.format(date) + "T"
				+ time2.format(date) + "Z" + " TO " + dateNow + "]");
		c.add(Calendar.DATE, -16);
		date = c.getTime();
		// 前一个月
		query.addFacetQuery("publishDate:[" + time1.format(date) + "T"
				+ time2.format(date) + "Z" + " TO " + dateNow + "]");
		c.add(Calendar.DATE, -30);
		date = c.getTime();
		// 前两个月
		query.addFacetQuery("publishDate:[" + time1.format(date) + "T"
				+ time2.format(date) + "Z" + " TO " + dateNow + "]");

		QueryResponse response = solrServer.query(query);
		System.out.println("查询时间:" + response.getQTime());
		List<FacetField> facets = response.getFacetFields();// 返回的facet列表
		for (FacetField facet : facets) {
			System.out.println(facet.getName());
			System.out.println("----------------");
			List<Count> counts = facet.getValues();
			for (Count count : counts) {
				System.out.println(count.getName() + ":" + count.getCount());
			}
			System.out.println();
		}
		// 根据时间段来获取数据
		Map<String, Integer> maps = response.getFacetQuery();
		for (Entry<String, Integer> entry : maps.entrySet()) {
			System.out.println(entry.getKey() + ":" + entry.getValue());
		}

	}

	// 最终使用的查询方式
	// SolrJ提供的查询功能比较强大,可以进行结果中查询、范围查询、排序等。
	// 补充一下范围查询的格式:[star t TO end],start与end是相应数据格式的值的字符串形式,“TO” 一定要保持大写!
	/*
	 * field 查询的字段名称数组 key 查询的字段名称对应的值 start 查询的起始位置 count 一次查询出来的数量 sortfield
	 * 需要排序的字段数组 flag 需要排序的字段的排序方式如果为true 升序 如果为false 降序 hightlight 是否需要高亮显示
	 */
	public QueryResponse searchResult(String[] field, String[] key, int start,
			int count, String[] sortfield, Boolean[] flag, Boolean hightlight)
			throws Exception {
		solrServer = createSolrServer();
		// 检测输入是否合法
		if (null == field || null == key || field.length != key.length) {
			return null;
		}

		SolrQuery query = null;
		try {
			// 初始化查询对象
			query = new SolrQuery(field[0] + ":" + key[0]);
			for (int i = 0; i < field.length; i++) {
				query.addFilterQuery(field[i] + ":" + key[i]);
			}
			// 设置起始位置与返回结果数
			query.setStart(start);
			query.setRows(count);
			// 设置排序
			if (!(null == sortfield || null == flag
					|| sortfield.length != flag.length)) {
				for (int i = 0; i < sortfield.length; i++) {
					if (flag[i]) {
						query.addSortField(sortfield[i], SolrQuery.ORDER.asc);
					} else {
						query.addSortField(sortfield[i], SolrQuery.ORDER.desc);
					}
				}
			}

			// 设置高亮
			if (null != hightlight) {
				query.setHighlight(true); // 开启高亮组件
				query.addHighlightField("jobsName");// 高亮字段
				query.setHighlightSimplePre("<font color=\"red\">");// 标记
				query.setHighlightSimplePost("</font>");
				query.setHighlightSnippets(1);// 结果分片数,默认为1
				query.setHighlightFragsize(1000);// 每个分片的最大长度,默认为100

			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		query.setFacet(true);// 设置facet=on
		query.setFacetLimit(10);// 限制facet返回的数量
		query.setFacetMissing(false);// 不统计null的值
		query.setFacetMinCount(1);// 设置返回的数据中每个分组的数据最小值,比如设置为1,则统计数量最小为1,不然不显示
		query.addFacetField(new String[] { "salary", "educateBackground",
				"jobExperience", "companytype", "jobsType" });// 设置需要facet的字段
		// query.addFacetQuery("publishDate:[2014-04-21T00:00:00Z TO 2014-04-23T00:00:00Z]");
		// query.addFacetQuery("publishDate:[2014-04-11T00:00:00Z TO 2014-04-13T00:00:00Z]");
		SimpleDateFormat time0 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		SimpleDateFormat time1 = new SimpleDateFormat("yyyy-MM-dd");
		SimpleDateFormat time2 = new SimpleDateFormat("HH:mm:ss");
		// return
		// date.getYear()+"-"+date.getMonth()+"-"+date.getDay()+"T"+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds();

		Calendar c = Calendar.getInstance();
		c.setTime(time0.parse(time1.format(c.getTime()) + " 23:59:59"));
		Date date = c.getTime();
		String dateNow = time1.format(date) + "T" + time2.format(date) + "Z";
		c.setTime(time0.parse(time1.format(c.getTime()) + " 23:59:59"));
		c.add(Calendar.DATE, -1);
		date = c.getTime();
		// 当天
		query.addFacetQuery("publishDate:[" + time1.format(date) + "T"
				+ time2.format(date) + "Z" + " TO " + dateNow + "]");
		c.add(Calendar.DATE, -2);
		date = c.getTime();
		// 前三天
		query.addFacetQuery("publishDate:[" + time1.format(date) + "T"
				+ time2.format(date) + "Z" + " TO " + dateNow + "]");
		c.add(Calendar.DATE, -4);
		date = c.getTime();
		// 前一周
		query.addFacetQuery("publishDate:[" + time1.format(date) + "T"
				+ time2.format(date) + "Z" + " TO " + dateNow + "]");
		c.add(Calendar.DATE, -7);
		date = c.getTime();
		// 前两周
		query.addFacetQuery("publishDate:[" + time1.format(date) + "T"
				+ time2.format(date) + "Z" + " TO " + dateNow + "]");
		c.add(Calendar.DATE, -16);
		date = c.getTime();
		// 前一个月
		query.addFacetQuery("publishDate:[" + time1.format(date) + "T"
				+ time2.format(date) + "Z" + " TO " + dateNow + "]");
		c.add(Calendar.DATE, -30);
		date = c.getTime();
		// 前两个月
		query.addFacetQuery("publishDate:[" + time1.format(date) + "T"
				+ time2.format(date) + "Z" + " TO " + dateNow + "]");

		QueryResponse rsp = null;
		try {
			rsp = solrServer.query(query);
			System.out.println("此次查询时间qtime :" + rsp.getQTime());
			List<FacetField> facets = rsp.getFacetFields();// 返回的facet列表
			for (FacetField facet : facets) {
				System.out.println(facet.getName());
				System.out.println("----------------");
				List<Count> counts = facet.getValues();
				for (Count countitem : counts) {
					System.out.println(countitem.getName() + ":"
							+ countitem.getCount());
				}
				System.out.println();
			}
			// 根据时间段来获取数据
			Map<String, Integer> maps = rsp.getFacetQuery();
			for (Entry<String, Integer> entry : maps.entrySet()) {
				System.out.println(entry.getKey() + ":" + entry.getValue());
			}
			// 获取返回的结果
			SolrDocumentList docs = rsp.getResults();
			for (SolrDocument doc : docs) {
				System.out.println("-----");
				System.out.println(doc.getFieldValue("jobsName"));
				System.out.println(doc.getFieldValue("publishDate"));

			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		// 返回查询结果
		return rsp;
	}
}

时间: 2024-11-05 21:38:05

solr在使用solrj操作中的各个操作大全(在solrcores中测试)的相关文章

solr 学习之solrJ

solrJ是访问Solr服务的JAVA客户端,提供索引和搜索的请求方法,SolrJ通常嵌入在业务系统中,通过solrJ的API接口操作Solr服务. <!-- https://mvnrepository.com/artifact/org.apache.solr/solr-solrj --> <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</arti

Solr使用初探——SolrJ的使用

二.SolrJ的使用 SolrJ覆盖了solr的全部功能,下面将自己在实际开发中所使用的程序粘贴出来并适当加以解释,由于本人比较菜,代码书写不是那么的精练,还请见谅. 1.  创建solrserver对象: try { solr = new CommonsHttpSolrServer("http://localhost:8983/solr"); solr.setConnectionTimeout(100); solr.setDefaultMaxConnectionsPerHost(10

QT SQLite 多数据库操作大全

QT SQLite 多数据库操作大全 一.单数据库模型 一般QT都是把打开一个缺省数据库连接,操作一个数据库连接,但是对Sqlite中频率修改容易加锁,因此有一种设计模式是把频率修改的表放在不同的数据库文件中,但这样要修改代码操作数据库部分 通常打开代码 http://developer.nokia.com/community/wiki/Creating_an_SQLite_database_in_Qt bool DatabaseManager::openDB() { // Find QSLit

MFC各种控件的常见操作(逐步添加中......)

由于经常切换系统或界面框架进行编程,难免有时会忘记之前的编程函数等等.所有在此自己做一个备份,以防止重新充电带来的痛苦! 1.CButton 1.1 在VC中编程实现按钮的启用(enable)和禁用(disable) 1.1.1 方式1:在对控件添加变量以后 m_btnQuit.EnableWindow(FALSE); //禁用按钮 m_btnQuit.EnableWindow(TRUE); //启用按钮 m_btnQuit.EnableWindow(FALSE); //禁用按钮 m_btnQu

【整理】C#文件操作大全(SamWang)

[整理]C#文件操作大全(SamWang) 文件与文件夹操作主要用到以下几个类: 1.File类: 提供用于创建.复制.删除.移动和打开文件的静态方法,并协助创建 FileStream 对象. msdn:http://msdn.microsoft.com/zh-cn/library/system.io.file(v=VS.80).aspx 2.FileInfo类: 提供创建.复制.删除.移动和打开文件的实例方法,并且帮助创建 FileStream 对象 msdn:http://msdn.micr

jQuery操作iframe子页中元素代码实例

jQuery操作iframe子页中元素代码实例:本章节介绍一下如何在父页面中操作iframe子页面中的元素,希望能够给需要的朋友带来一定的帮助.一.父页面代码: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <

java日期操作大全

摘自(http://www.blogjava.net/i369/articles/83483.html) java日期操作 大全 先来一个:  取得指定月份的第一天与取得指定月份的最后一天  http://iamin.blogdriver.com/iamin/847990.html /**           *  取得指定月份的第一天           *           *  @param  strdate  String           *  @return  String   

linux基础学习笔记——操作大全

作者:liaoyi 更新时间:2014-6-2 ****************基本操作***************** 关机 shutdown -h now    root用户               init 0              root用户halt      root+一般用户poweroff 重启shutdown -r now    root用户init6     root用户reboot            root+一般用户 注意:1.shutdown 比较灵活,可

C、C++文件操作大全

基于C的文件操作  在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别介绍之. 一.流式文件操作  这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下: typedef struct {  int level; /* fill/empty level of buffer */  unsigned flags; /* File status flags */  char fd; /* File descriptor */  unsig