一、solr简介
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。solr现在支持多种返回结果,xml,phthon。
二、springboot整合solr
2.1 添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-solr</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> |
2.2 配置
#这里使用的是yml的配置模式 spring: application: name: solr data: solr: host: http://127.0.0.1:8080/solr server: port: 8081 |
2.3 demo整体目录
3.代码
3.1service
public interface SolrService { List<User> addUser(); } |
3.2service实现类
@Service public class SolrServiceImpl implements SolrService { @Override public List<User> addUser() { List<User> list = new ArrayList<>(); User user = new User(); for (int i = 0; i <5 ; i++) { user.setId(UUID.randomUUID().toString().replace("-","")); user.setName("jack"+i); if( i % 2 ==0) { user.setSex("男"); }else { user.setSex("女"); } user.setAddress("兰州市安宁区666"+i); user.setHost(73040+i); list.add(user); } return list; } } |
3.3实体类
public class User implements Serializable {
//必须实现可序列化接口,要在网络上传输
@Field("id")--------使用这个注释,里面的名字是根据你在solr数据库中配置的来决定
private String id;
@Field("item_name")
private String name;
@Field("item_sex")
private String sex;
@Field("item_address")
private String address;
@Field("item_host")
private Integer host; //此处省略get和set方法 ...... } |
3.4controller控制层
@RestController public class SolrController { @Autowired private SolrService solrService; @Autowired private SolrClient solrClient; //批量增加 @RequestMapping("/addUsers") public void addUsers() throws IOException, SolrServerException { List<User> users = solrService.addUser(); solrClient.addBeans(users); solrClient.commit(); } //单个增加 @RequestMapping("/addUser") public void addUser() throws IOException, SolrServerException { User user = new User(); user.setId("456788"); user.setName("王强"); user.setAddress("北京市"); user.setSex("女"); user.setHost(456752); solrClient.addBean(user); solrClient.commit(); } //根据di查询 @RequestMapping("/getByIdFromSolr/{id}") public void getByIdFromSolr(@PathVariable("id") String id) throws IOException, SolrServerException { //根据id查询内容 SolrDocument solrDocument = solrClient.getById(id); //获取filedName Collection<String> fieldNames = solrDocument.getFieldNames(); //获取file名和内容 Map<String, Object> fieldValueMap = solrDocument.getFieldValueMap(); // int childDocumentCount = solrDocument.getChildDocumentCount(); List<SolrDocument> childDocuments = solrDocument.getChildDocuments(); System.out.println("byId=================="+solrDocument); System.out.println("fieldNames=================="+fieldNames); System.out.println("fieldValueMap=================="+fieldValueMap); // System.out.println("childDocumentCount=================="+childDocumentCount); System.out.println("childDocuments=================="+childDocuments); } //根据di删除 @RequestMapping("/delById/{id}") public void delById(@PathVariable("id") String id) throws IOException, SolrServerException { //根据id删除信息 UpdateResponse updateResponse = solrClient.deleteById(id); //执行的时间 long elapsedTime = updateResponse.getElapsedTime(); int qTime = updateResponse.getQTime(); //请求地址 String requestUrl = updateResponse.getRequestUrl(); //请求的结果{responseHeader={status=0,QTime=2}} NamedList<Object> response = updateResponse.getResponse(); //请求结果的头{status=0,QTime=2} NamedList responseHeader = updateResponse.getResponseHeader(); //请求的状态 0 int status = updateResponse.getStatus(); System.out.println("elapsedTime==========="+elapsedTime); System.out.println("qTime==========="+qTime); System.out.println("requestUrl==========="+requestUrl); System.out.println("response==========="+response); System.out.println("responseHeader==========="+responseHeader); System.out.println("status==========="+status); } @RequestMapping("/queryFromSolr") public Object queryFromSolr() throws IOException, SolrServerException { //第一种方式 // Map<String, String> queryParamMap = new HashMap<String, String>(); // queryParamMap.put("q", "*:*"); // queryParamMap.put("f1","id,name"); // queryParamMap.put("sort","id asc"); // MapSolrParams mapSolrParams = new MapSolrParams(queryParamMap); // solrClient.query(mapSolrParams); //第二种方式 SolrQuery solrQuery = new SolrQuery(); solrQuery.setQuery("*:*"); // solrQuery.addField("*"); solrQuery.add("q","id:4567"); solrQuery.setSort("id", SolrQuery.ORDER.asc); //设置查询的条数 solrQuery.setRows(50); //设置查询的开始 solrQuery.setStart(0); //设置高亮 solrQuery.setHighlight(true); //设置高亮的字段 solrQuery.addHighlightField("item_name"); //设置高亮的样式 solrQuery.setHighlightSimplePre("<font color='red'>"); solrQuery.setHighlightSimplePost("</font>"); System.out.println(solrQuery); QueryResponse response = solrClient.query(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); } return documentList; } } |
solr的api中海油好多的方法,大家可以去参考solr的官网的文档去学习,下一期给大家
讲解如何安装solr和solr的集群的搭建。