1.添加数据到索引库:
@RequestMapping(value="/importData")
@ResponseBody
public String importData() throws SolrServerException, IOException{
// 查处表里面的所有的数据
List<lianxi> lianxiList = lianxiservice.importData();
// 创建solrServer
SolrServer solrServer = new HttpSolrServer("http://39.105.34.119:8010/solr");
for(lianxi x : lianxiList){
// 创建一个solr文档
SolrInputDocument doc = new SolrInputDocument();
// id , name_mz , sex , age 必须要放到 schema.xml 中配置 ,如下图
doc.setField("id", x.getId());
doc.setField("name_mz", x.getName());
doc.setField("sex", x.getSex());
doc.setField("age", x.getAge());
// 将文档添加进去
solrServer.add(doc);
// 提交
solrServer.commit();
}
return "success";
}
2 . 查询数据,并且高亮显示:
@RequestMapping(value="/check")
public String check(@RequestParam(value="pn",defaultValue="1") Integer pn,Model model,HttpServletRequest request) throws Exception{
String name = null;
if(request.getParameter("name") != null){ // 前端页面穿过来的关键词
name = new String(request.getParameter("name").getBytes("iso-8859-1"), "utf-8");
}
String url = "http://localhost:8012/lianxi/check?name=" + name; // 为了构建分页对象使用
int pageSize = 2; // 每页显示f
List<lianxi> lianxiList = new ArrayList<lianxi>();
SolrServer solrServer = new HttpSolrServer("http://ip地址:8010/solr");
SolrQuery solrQuery = new SolrQuery(); // 构建查询对象
// 关键词 name_mz 必须在 schema.xml 中有配置
solrQuery.set("q", "name_mz:"+name);
// 过滤条件
solrQuery.setStart(pn); // 从第几条开始查
solrQuery.setRows(2); // 每一页显示2条
// 高亮
solrQuery.setHighlight(true); // 开启高亮
solrQuery.addHighlightField("name_mz"); // 给哪一个field 加上高亮(样式 字体等)
solrQuery.setHighlightSimplePre("<span style='color:red'>");
solrQuery.setHighlightSimplePost("</span>");
// 排序 age 在 schema.xml 中必须有配置
solrQuery.addSort("age", ORDER.asc);
// 执行查询
QueryResponse response = solrServer.query(solrQuery);
// 如果有高亮的话取出高亮
Map<String,Map<String,List<String>>> hightlight = response.getHighlighting();
// 下面解释了 取出的高亮的集合的含义
/* Map K : V 3(id) : Map
Map K : V name_mz : List<String>
List<String> 我的家(列表上面显示的值)*/
// 结果集
SolrDocumentList solrlist = response.getResults();
// 发现的条数构建分页
long num = solrlist.getNumFound(); // 总的条数
for(SolrDocument solr : solrlist){
// 取出值 id 在schema.xml 中必须有配置
String id = (String)solr.get("id");
// 通过 id 取出Map里面的Map ,里面的map再通过 name_mz键取出List集合,list集合的第一个元素就是通过关键词查处 的值
Map <String,List<String>> map = hightlight.get(id);
List<String> list = map.get("name_mz");
// 取出值 sex 在schema.xml 中必须有配置
String sex = (String)solr.get("sex");
// 取出值 age在schema.xml 中必须有配置
int age = (Integer) solr.get("age");
// 构建lianxi 对象
lianxi lx = new lianxi(id, list.get(0), sex, String.valueOf(age));
lianxiList.add(lx);
System.out.println(lx.toString());
}
// 创建PageBean对象及一系列的参数
PageBean<lianxi> pageBean = new PageBean<lianxi>(pn, pageSize, (int)num);
pageBean.setList(lianxiList); // 将数据放到页面
pageBean.setUrl(url);
// 传到页面
model.addAttribute("page", pageBean);
return "listSolr";
}