solrj7.5实现查询数据并且高亮显示
前面给大家讲了如何搭建solr服务器,在这里给大家讲解如何在java端查询数据并且高亮显示
先给大家看效果
给大家贴数据的关键代码
/**
* 查询数据
*
* @param title
* @return
* @throws IOException
* @throws SolrServerException
*/
public Map<String, Object> findBolgs(String title, PageBean pageBean) throws IOException, SolrServerException {
String solrUrl = "http://127.0.0.1:8983/solr/new_core";
HttpSolrClient solrClient = new HttpSolrClient.Builder(solrUrl).build();
// 创建搜索对象
SolrQuery query = new SolrQuery();
// 设置搜索条件
if (StringUtils.isNotBlank(title)) {
query.set("q", "title:" + title);
query.setHighlight(true); // 开启高亮组件或用query.setParam("hl", "true");
query.addHighlightField("title");// 高亮字段
query.setHighlightSimplePre("<font color='red'>");//标记,高亮关键字前缀
query.setHighlightSimplePost("</font>");//后缀
}else{
query.set("q", "title:*");
}
//设置返回数据为json格式
query.set("wt", "json");
// 分页参数
query.setStart(pageBean.getStartIndex());
// 设置每页显示多少条
query.setRows(pageBean.getRows());
//发起搜索请求
QueryResponse response = solrClient.query(query);
// 查询结果
SolrDocumentList docs = response.getResults();
// 查询结果总数
long count = docs.getNumFound();
//高亮集合
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
//高亮集合不为空的话把普通字段替换为高亮字段
if(highlighting!=null) {
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> maps;
for (int i = 0; i < docs.size(); i++) {
maps = new HashMap<>();
List<String> strings = highlighting.get(docs.get(i).get("id")).get("title");
maps.put("id", docs.get(i).get("id"));
maps.put("orUrl", docs.get(i).get("orUrl"));
maps.put("title", strings.get(0));
list.add(maps);
}
Map<String, Object> map = new HashMap<>();
map.put("doc", list);
map.put("count", count);
solrClient.close();
return map;
}else{
Map<String, Object> map = new HashMap<>();
map.put("doc", docs);
map.put("count", count);
solrClient.close();
return map;
}
}
这里再给大家贴一个简单使用的代码
/ solr服务器的地址
String solrUrl = "http://127.0.0.1:8983/solr/new_core";
HttpSolrClient solrClient = new HttpSolrClient.Builder(solrUrl).build();
// 创建搜索对象
SolrQuery query = new SolrQuery();
// 设置搜索条件这里很多操作都可以使用set完成那些参数参照后台参数介绍
query.set("q", "title:虚拟机");
query.setHighlight(true); // 开启高亮组件或用query.setParam("hl", "true");
query.addHighlightField("title");// 设置高亮字段
query.setHighlightSimplePre("<font color='red'>");//标记,高亮关键字前缀
query.setHighlightSimplePost("</font>");//后缀
//设置返回数据为json格式
query.set("wt", "json");
// 分页参数
query.setStart(0);
// 设置每页显示多少条
query.setRows(10);
//发起搜索请求
QueryResponse response = solrClient.query(query);
// 查询结果
SolrDocumentList docs = response.getResults();
// 查询结果总数
long count = docs.getNumFound();
// 高亮结果
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
Set<String> strings = highlighting.keySet();
for (String s : strings) {
Map<String, List<String>> stringListMap = highlighting.get(s);
System.out.println(stringListMap);
}
System.out.println("总条数为" + count + "条");
for (SolrDocument doc : docs) {
System.out.println("id:" + doc.get("id") + ",title:" + doc.get("title"));
}
solrClient.close();
关于solr的安装和配置大家可以去看我之前的博客