Solr【二】:Springboot整合Solr完成简单增删改查
1.前言
本文是在上一章Solr【一】:初识solr的基础上进行的,主要记录springboot整合solr完成简单增删改查的操作。
2.solrj和spring-data-solr
2.1 solrj
solrJ是solr官方推出的客户端工具包,将solrj的jar包放到我们项目中,我们调用solrj中的api来远程给solr服务器发送命令,solr服务器就可以完成对索引库的操作(添加修改删除查询).
2.2 spring-data-solr
spring-data-solr就是为了方便Solr的开发所研制的一个框架,其底层是对SolrJ(官方API)的封装
3. spring-data-solr方式整合solr
3.1 pom文件
<!-- solr -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
<version>2.1.8.RELEASE</version>
</dependency>
3.2 application.yml
spring:
data:
solr:
host: http://localhost:8983/solr
3.3 实体类
这个实体类就是solr服务器的配置文件配置的字段。@Field注解是映射作用,Java实体类与solr索引的映射。
@Data
public class Demo {
@Field
private String fEntityGuid;
private String fEntityName;
private String fLongitude;
private String fLatitude;
private String fIsNew;
}
3.4 注入SolrClient对象
用法示例如下
@Autowired
SolrClient solrClient;
3.5 代码示例
3.5.1 查询全部索引
@RequestMapping("queryAll")
public SolrDocumentList queryAll() throws IOException, SolrServerException {
SolrQuery query = new SolrQuery();
query.setQuery("*:*");
QueryResponse queryResponse = solrClient.query("coreDemo",query);
// 取查询结果
SolrDocumentList documentList = queryResponse.getResults();
return documentList;
}
3.5.2 查询单个索引
@RequestMapping("query")
public SolrDocumentList query() throws IOException, SolrServerException{
SolrQuery query = new SolrQuery();
query.setQuery("fEntityName:张一");
QueryResponse queryResponse = solrClient.query("coreDemo",query);
// 取查询结果
SolrDocumentList documentList = queryResponse.getResults();
return documentList;
}
3.5.3 增加或修改索引
@RequestMapping("addOrUpdate")
public String addOrUpdate() {
try {
SolrInputDocument doc = new SolrInputDocument();
doc.setField("fEntityGuid", "4");
doc.setField("fEntityName", "王五");
doc.setField("fLongitude", "112.32");
doc.setField("fLatitude", "23.22");
doc.setField("fIsNew", "1");
//如果spring.data.solr.host里面配置到demo_core,那么这里就不需要传demo_core
solrClient.add("coreDemo", doc);
solrClient.commit("coreDemo");
return "新增/更新成功!";
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
3.5.4 根据id删除索引
@RequestMapping("delById/{id}")
public int delById(@PathVariable("id") String id) throws IOException, SolrServerException {
//根据id删除信息
UpdateResponse updateResponse = solrClient.deleteById("coreDemo",id);
solrClient.commit("coreDemo");
return updateResponse.getStatus();
}
3.5.5 高亮查询
@RequestMapping("highlight")
public void queryFromSolr() throws IOException, SolrServerException {
SolrQuery solrQuery = new SolrQuery();
solrQuery.add("q","fEntityName:张一");
//设置查询的条数
solrQuery.setRows(50);
//设置查询的开始
solrQuery.setStart(0);
//设置高亮
solrQuery.setHighlight(true);
//设置高亮的字段
solrQuery.addHighlightField("fEntityName");
//设置高亮的样式
solrQuery.setHighlightSimplePre("<font color='red'>");
solrQuery.setHighlightSimplePost("</font>");
System.out.println(solrQuery);
QueryResponse response = solrClient.query("coreDemo",solrQuery);
//返回高亮显示结果
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
//response.getResults();查询返回的结果
SolrDocumentList documentList = response.getResults();
for (SolrDocument solrDocument : documentList) {
System.out.println("solrDocument==============" +solrDocument);
}
System.out.println("highlighting==============" + highlighting);
}
上述内容即本文全部内容,SolrClient还提供了很多可以操作solr的api,如关键字查询、过滤查询、分页、条件查询等等,本文不一一列举,有兴趣可以查阅官方文档进行了解。