springboot配置
在此之前需要配置好solr相关配置详情请见:
solr的安装和使用
和
solr的suggest配置(建议查询配置)
1、创建maven项目
在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>
<groupId>com.ljl</groupId>
<artifactId>solrTest</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- solr-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.41</version>
</dependency>
</dependencies>
<!-- Package as an executable jar -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2、application.yml 文件配置如下
server:
port: 8081
spring:
application:
name: solrDemo
data:
solr:
host: http://127.0.0.1:8983/solr/
datasource:
username: root
password: 123456
url: jdbc:mysql://127.0.0.1:3306/solrDemo?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
mapper-locations: classpath:mapper/*Mapper.xml
type-aliases-package: com.ljl.entity
3、启动类
package com.ljl;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("com.ljl.mapper")
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
}
4、实体类
package com.ljl.entity;
import lombok.Getter;
import lombok.Setter;
import org.apache.solr.client.solrj.beans.Field;
import org.springframework.data.annotation.Id;
@Getter
@Setter
public class User {
@Id
@Field("id")
private String id;
@Field("username")
private String userName;
@Field("nickname")
private String nickName;
@Field("age")
private String age;
@Field("gender")
private String gender;
@Field("desc")
private String description;
}
5、service接口
package com.ljl.service;
import com.ljl.entity.User;
import java.util.List;
public interface SolrService {
/**
* 查询所有数据
*/
List<User> queryAll();
/**
* 建议查询(智能提示)该方法之前需要去配置solr的suggest
*/
List<String> querySuggest(String query);
/**
* 向solr 索引库中导入数据
*/
void add(User user);
/**
* 更改solr 索引库中数据
* @param user
*/
void update(User user);
/**
* 跟句id删除solr的数据
* @param id
*/
void delete(String id);
/**
* 删除所有数据
*/
void delAll();
}
6、service实现类
package com.ljl.service.SolrServiceoImp;
import com.ljl.entity.User;
import com.ljl.service.SolrService;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.util.NamedList;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Service
public class SolrServiceImp implements SolrService {
@Autowired
private SolrClient solrClient;
//建议查询
private static final String REQUEST_HANDLER = "/suggest";
private static final String SUGGEST_DICTIONARY = "xxxSuggester";
//索引库
private static final String CORE_1="democore";
@Override
public List<User> queryAll() {
List<User> users = new ArrayList<User>();
SolrQuery solrQuery = new SolrQuery();
solrQuery.setQuery("*:*");
try {
QueryResponse queryResponse = solrClient.query(CORE_1,solrQuery);
if (queryResponse != null) {
users = queryResponse.getBeans(User.class);
}
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return users;
}
@Override
public List<String> querySuggest(String query) {
SolrQuery solrQuery = new SolrQuery();
//建议查询
solrQuery.setRequestHandler(REQUEST_HANDLER);
solrQuery.set("suggest.build", true);
solrQuery.set("suggest.dictionary", SUGGEST_DICTIONARY);
solrQuery.set("q", query);
QueryResponse queryResponse = null;
try {
solrClient.commit("democore");
queryResponse = solrClient.query(CORE_1,solrQuery);
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
List<String> result = new ArrayList<String>();
if (queryResponse != null) {
NamedList namedList = queryResponse.getResponse();
// System.out.println("queryResponse : " + queryResponse);
// System.out.println("namedList : " + namedList);
Map map = (Map) namedList.get("suggest");
// System.out.println("suggest :" + map);
NamedList dictionaryMap = (NamedList) map.get(SUGGEST_DICTIONARY);
// System.out.println("dictionaryMap:" + dictionaryMap);
NamedList data = (NamedList) dictionaryMap.get(query);
Integer numFound = Integer.valueOf(data.get("numFound").toString());
List<NamedList> suggests = (List<NamedList>) data.get("suggestions");
// System.out.println("numFound:" + numFound);
// System.out.println("suggests:" + suggests);
for (int i = 0; i < suggests.size(); i++) {
result.add(suggests.get(i).get("term").toString());
}
}
return result;
}
@Override
public void add(User user) {
try {
SolrInputDocument document = new SolrInputDocument();
document.setField("id", user.getId());
document.setField("username", user.getUserName());
document.setField("nickname", user.getNickName());
document.setField("age", user.getAge());
document.setField("gender", user.getGender());
document.setField("desc", user.getDescription());
solrClient.add(CORE_1,document);
solrClient.commit(CORE_1);
} catch (IOException e) {
e.printStackTrace();
} catch (SolrServerException e) {
e.printStackTrace();
}
}
@Override
public void update(User user) {
try {
SolrInputDocument document = new SolrInputDocument();
document.setField("id", user.getId());
document.setField("username", user.getUserName());
document.setField("nickname", user.getNickName());
document.setField("age", user.getAge());
document.setField("gender", user.getGender());
document.setField("desc", user.getDescription());
solrClient.add(CORE_1,document);
solrClient.commit(CORE_1);
} catch (IOException e) {
e.printStackTrace();
} catch (SolrServerException e) {
e.printStackTrace();
}
}
@Override
public void delete(String id) {
try {
solrClient.deleteById(CORE_1,id);
solrClient.commit(CORE_1);
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void delAll() {
try {
solrClient.deleteByQuery(CORE_1,"*:*");
solrClient.commit(CORE_1);
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
7、controller层
package com.ljl.controller;
import com.ljl.entity.User;
import com.ljl.service.SolrService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("solr/")
@CrossOrigin
public class SolrController {
@Autowired
private SolrService solrService;
/**
* 查询所有数据
*
* @return
*/
@GetMapping("queryAll")
public List<User> query() {
return solrService.queryAll();
}
/**
* 建议查询
*
* @return
*/
@GetMapping("querySuggest/{query}")
public List<String> querySuggest(@PathVariable("query") String query) {
return solrService.querySuggest(query);
}
@GetMapping("add")
public String add(){
User user = new User();
user.setId("108");
user.setNickName("你猜");
user.setUserName("我是新来的");
user.setAge("13");
user.setDescription("美美真美,哈哈");
user.setGender("女");
solrService.add(user);
return "保存";
}
@GetMapping("update")
public String update(){
User user = new User();
user.setId("101");
user.setNickName("你猜");
user.setUserName("我是被更新后的");
user.setAge("13");
user.setDescription("美美真美,哈哈");
user.setGender("女");
solrService.update(user);
return "更新";
}
@GetMapping("delete/{id}")
public String delete(@PathVariable("id") String id){
solrService.delete(id);
return "删除";
}
}
【查询所有数据接口返回结果如下图】
【建议查询接口返回结果如下】
8、 项目结构