添加pom.xmlsolr依赖
<!--solr依赖-->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-solr</artifactId>
</dependency>
application.yml配置
spring:
data:
solr:
host: http://localhost:8080/solr/mycore //mycore是自己创建的Core Admin
创建solr操作工具类:SolrUtils.java
/**
* @Description solr操作工具类
* @Author HeLiu
* @Date 2019/5/7 15:58
* @Version 1.0
**/
@Component
public class SolrUtils {
private static final Logger logger = LoggerFactory.getLogger(SolrUtils.class);
private SolrClient solrClient;
private SolrQuery solrQuery;
@Autowired
public SolrUtils(SolrClient solrClient) {
this.solrClient = solrClient;
solrQuery = new SolrQuery();
}
/**
* @Description 向solr中添加对象
* @Author HeLiu
* @Date 2019/5/7 16:03
**/
public void addSolrPO(SolrSearchService data) throws IOException, SolrServerException {
solrClient.addBean(data);
solrClient.commit();
}
/**
* @Description solr查询 key-关键字(分页)
* @Author HeLiu
* @Date 2019/5/7 16:03
**/
public Map<String, Object> querySolrList(String key, int page, int row) throws IOException, SolrServerException {
solrQuery.setQuery(key);
//进行分页
int start = (page - 1) * row;
int ent = page * row;
solrQuery.setStart(start);
solrQuery.setRows(ent);
//设置高亮字段
solrQuery.setHighlight(true);//开启高亮组件或用query.setParam("hl", "true");
solrQuery.addHighlightField("serviceName");//多个用逗号拼接
solrQuery.setHighlightSimplePre("<font color='red'>");//标记,高亮关键字前缀
solrQuery.setHighlightSimplePost("</font>");//后缀
QueryResponse query = solrClient.query(solrQuery);
// 文档结果集
SolrDocumentList docs = query.getResults();
logger.info("---------------->文档结果集:docs=" + docs);
//高亮结果集
Map<String, Map<String, List<String>>> highlightingRes = query.getHighlighting();
logger.info("---------------->高亮结果集:highlightingRes=" + highlightingRes);
Map<String, Object> params = new HashMap<>();
//定义个集合
List<SolrSearchService> list = new ArrayList<>();
int total = getSolrIndexCount(key);
if (total > 0) {
SolrSearchService solrSearchService;
for (SolrDocument s : docs) {
solrSearchService = new SolrSearchService();
String serviceid = s.getFirstValue("serviceid").toString();
String serviceName = null;
Map<String, List<String>> hightServiceIdMap = highlightingRes.get(serviceid);
if (!CollectionUtils.isEmpty(hightServiceIdMap)) {
serviceName = hightServiceIdMap.get("serviceName").get(0);
} else {
serviceName = s.getFirstValue("serviceName").toString();
}
solrSearchService.setServiceName(serviceName);
solrSearchService.setServiceid(serviceid);
solrSearchService.setServiceCode(s.getFirstValue("serviceCode").toString());
solrSearchService.setDeptId(s.getFirstValue("deptId").toString());
solrSearchService.setDeptName(s.getFirstValue("deptName").toString());
solrSearchService.setLxdh(s.getFirstValue("lxdh").toString());
solrSearchService.setBldd(s.getFirstValue("bldd").toString());
solrSearchService.setBszn(s.getFirstValue("bszn").toString());
solrSearchService.setCreateTime(s.getFirstValue("createTime").toString());
list.add(solrSearchService);
}
}
params.put("total", total); //总条数
params.put("pageIndex", page); //当前页
params.put("pageSize", row); //每页显示数
params.put("totalPage", (total + row - 1) / row); //总页数
params.put("rows", list); //数据
return params;
}
/**
* 删除全部
*
* @throws IOException
* @throws SolrServerException
*/
public void delDoc() throws IOException, SolrServerException {
solrClient.deleteByQuery("*:*");
solrClient.commit();
}
/**
* @Description 获取solr索引库中总条数
* @Author HeLiu
* @Date 2019/5/8 11:42
**/
public int getSolrIndexCount(String key) {
int num = 0;
try {
solrQuery.set(key);
QueryResponse query = solrClient.query(solrQuery);
SolrDocumentList docs = query.getResults();
num = (int) docs.getNumFound();
} catch (Exception e) {
logger.error("------------获取solr索引库中总条数error----------", e);
}
return num;
测试:
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestSolrController {
private static final Logger logger = LoggerFactory.getLogger(TestSolrController.class);
@Autowired
private SolrUtils solrUtils;
@Test
public void queryTest() {
try {
Map<String, Object> result = solrUtils.querySolrList("keyvalue:学生", 1, 10);
logger.info("查询结果:result{}=" + result);
} catch (Exception e) {
logger.error("-------------查询失败:errorMsg{}=" + e);
}
}
}
测试结果:(将打印的数据用JSON转换工具转换查看,这里的分页数据,serviceName是高亮显示)