将数据导入到solr中
创建Controller类 调用Service类
后期整理 仅供参考
配置Controller
web端的Controller
package com.xu.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.xu.service.SolrService;
import com.xu.utils.TaotaoResult;
//进行注解扫描
@Controller
public class SearchController {
// 引入需要导入的接口
@Autowired
private SolrService solrService;
// 调用方法
@RequestMapping("/importd")
@ResponseBody
private TaotaoResult importItem() {
return solrService.itemSolr();
}
}
SolrService
package com.xu.service;
import com.xu.utils.TaotaoResult;
public interface SolrService {
TaotaoResult itemSolr();
}
Service的pom.xml
<!-- solr客户端 -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>${solrj.version}</version>
</dependency>
配置solr客户端信息
applicationContext-solr.xml
<!-- 创建HttpSolrServer对象 -->
<bean class="org.apache.solr.client.solrj.impl.HttpSolrServer">
<constructor-arg index="0" value="http://10.0.129.149:8080/solr/collection1"></constructor-arg>
</bean>
SolrServiceImpl
package com.xu.service;
import java.util.List;
import javax.annotation.Resource;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.common.SolrInputDocument;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.xu.mapper.ItemMapper;
import com.xu.pojo.SearchItem;
import com.xu.utils.TaotaoResult;
@Service
public class SolrServiceImpl implements SolrService {
// 逆向工程生成的文件
@Autowired
private ItemMapper itemMapper;
// 调用jar包
@Resource
private SolrServer solrServer;
@Override
public TaotaoResult itemSolr() {
// 查询所有需要导入的数据
List<SearchItem> items = itemMapper.findItems();
try {
for (SearchItem item : items) {
SolrInputDocument doc = new SolrInputDocument();
System.out.println("正在进行");
doc.setField("id", item.getId());
doc.setField("item_title", item.getTitle());
doc.setField("item_sell_point", item.getSell_point());
doc.setField("item_price", item.getPrice());
doc.setField("item_image", item.getImage());
doc.setField("item_category_name", item.getCategory_name());
// 分别将遍历出来的数值进行存进solr中
solrServer.add(doc);
}
// 需要进行事务回滚 否则将无法存进数值
solrServer.commit();
// 返回执行状态
return TaotaoResult.ok();
} catch (Exception e) {
e.printStackTrace();
// 出现异常后 返回执行状态
return TaotaoResult.build(500, "导入数据失败");
}
}
}
工具类
TaotaoResult
package com.xu.utils;
import java.io.Serializable;
import java.util.List;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
* 淘淘商城自定义响应结构
*/
public class TaotaoResult implements Serializable{
// 定义jackson对象
private static final ObjectMapper MAPPER = new ObjectMapper();
// 响应业务状态
private Integer status;
// 响应消息
private String msg;
// 响应中的数据
private Object data;
public static TaotaoResult build(Integer status, String msg, Object data) {
return new TaotaoResult(status, msg, data);
}
public static TaotaoResult ok(Object data) {
return new TaotaoResult(data);
}
public static TaotaoResult ok() {
return new TaotaoResult(null);
}
public TaotaoResult(Object data) {
this.status = 200;
this.msg = "OK";
this.data = data;
}
public TaotaoResult() {
}
public static TaotaoResult build(Integer status, String msg) {
return new TaotaoResult(status, msg, null);
}
public TaotaoResult(Integer status, String msg, Object data) {
this.status = status;
this.msg = msg;
this.data = data;
}
// public Boolean isOK() {
// return this.status == 200;
// }
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
/**
* 将json结果集转化为TaotaoResult对象
*
* @param jsonData json数据
* @param clazz TaotaoResult中的object类型
* @return
*/
public static TaotaoResult formatToPojo(String jsonData, Class<?> clazz) {
try {
if (clazz == null) {
return MAPPER.readValue(jsonData, TaotaoResult.class);
}
JsonNode jsonNode = MAPPER.readTree(jsonData);
JsonNode data = jsonNode.get("data");
Object obj = null;
if (clazz != null) {
if (data.isObject()) {
obj = MAPPER.readValue(data.traverse(), clazz);
} else if (data.isTextual()) {
obj = MAPPER.readValue(data.asText(), clazz);
}
}
return build(jsonNode.get("status").intValue(), jsonNode.get("msg").asText(), obj);
} catch (Exception e) {
return null;
}
}
/**
* 没有object对象的转化
*
* @param json
* @return
*/
public static TaotaoResult format(String json) {
try {
return MAPPER.readValue(json, TaotaoResult.class);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* Object是集合转化
*
* @param jsonData json数据
* @param clazz 集合中的类型
* @return
*/
public static TaotaoResult formatToList(String jsonData, Class<?> clazz) {
try {
JsonNode jsonNode = MAPPER.readTree(jsonData);
JsonNode data = jsonNode.get("data");
Object obj = null;
if (data.isArray() && data.size() > 0) {
obj = MAPPER.readValue(data.traverse(),
MAPPER.getTypeFactory().constructCollectionType(List.class, clazz));
}
return build(jsonNode.get("status").intValue(), jsonNode.get("msg").asText(), obj);
} catch (Exception e) {
return null;
}
}
}
mapper文件
package com.xu.mapper;
import java.util.List;
import com.xu.pojo.SearchItem;
public interface ItemMapper {
//查询所有需要导入到solr的数据
List<SearchItem> findItems();
}
mapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xu.mapper.ItemMapper">
<select id="findItems" resultType="com.xu.pojo.SearchItem">
SELECT
a.id,
a.title,
a.sell_point,
a.price,
a.image,
b.name category_name
FROM tb_item a LEFT JOIN tb_item_cat b
ON a.cid=b.id
where a.status=1
</select>
</mapper>