版权声明:本文为博主原创文章,未经博主允许不得转载
一.Solr介绍
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。solr现在支持多种返回结果,xml,phthon。
二、springboot整合solr
1.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.mr</groupId>
<artifactId>springboot_solr</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot_solr</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--solr-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.application.yml
#这里使用的是yml的配置模式
spring:
application:
name: solr
data:
solr:
host: http://127.0.0.1:8080/solr
server:
port: 8086
3.Demo示例
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("上海市徐汇区"+i);
user.setHost(73040+i);
list.add(user);
}
return list;
}
}
3.3实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
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;
}
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("SM");
user.setAddress("北京市");
user.setSex("男");
user.setHost(456752);
solrClient.addBean(user);
solrClient.commit();
}
//根据id查询
@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);
}
//根据id删除
@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;
}
}