一、dao
我们写一个sql,要包含:商品Id、商品标题、商品卖点、商品价格、商品图片、分类id。
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
创建一个pojo,用于接收这个返回结果。
创建dao层。包含:ItemMapper和ItemMapper.xml
分析:
1、查询所有商品数据。
2、循环把商品数据添加到索引库。使用solrJ实现。
3、返回成功。返回E3Result
把solrJ的jar包添加到工程。
二、solrJ维护索引库
2.1 solrJ添加索引库
1、把solrJ的jar包添加到工程。
2、创建一个SolrServer对象。创建一个和sorl服务的连接。HttpSolrServer。
3、创建一个文档对象。SolrInputDocument。
4、向文档对象中添加域。必须有一个id域。而且文档中使用的域必须在schema.xml中定义。
5、把文档添加到索引库
6、Commit。
@Test
public void addDocument() throws SolrServerException, IOException {
// 创建一个SolrServer对象,创建一个连接。参数solr服务的url
SolrServer solrServer = new HttpSolrServer("http://192.168.25.128:8080/solr/collection1");
// 创建一个文档对象SolrInputDecument
SolrInputDocument document = new SolrInputDocument();
// 向文档对象中添加域。文档中必须包含一个id域,所有的域的名称必须在schema.xml中定义。
document.addField("id", "doc01");
document.addField("item_title", "测试商品01");
document.addField("item_price", 1000);
// 把文档写入索引库
solrServer.add(document);
// 提交
solrServer.commit();
}
三、service
e3-search-interface中创建接口类:
public interface SearchItemService {
E3Result importAllItems();
}
e3-search-service中创建实现类:
/**
* 索引库维护Service
*/
@Service
public class SearchItemServiceImpl implements SearchItemService {
@Autowired
private ItemMapper itemMapper;
@Autowired
private SolrServer solrServer;
@Override
public E3Result importAllItems() {
try {
// 查询商品列表
List<SearchItem> itemList = itemMapper.getItemList();
// 遍历商品列表
for (SearchItem searchItem : itemList) {
// 创建文档对象
SolrInputDocument document = new SolrInputDocument();
// 向文档对象中添加域
document.addField("id", searchItem.getId());
document.addField("item_title", searchItem.getTitle());
document.addField("sell_point", searchItem.getSell_point());
document.addField("price", searchItem.getPrice());
document.addField("image", searchItem.getImage());
document.addField("category_name", searchItem.getCategory_name());
// 把文档对象写入索引库
solrServer.add(document);
}
// 提交
solrServer.commit();
// 返回成功
return E3Result.ok();
} catch (Exception e) {
e.printStackTrace();
return E3Result.build(500, "数据导入时发生异常");
}
}
}
发布服务:
表现层引入依赖:
引入服务:
该install的install。启动e3-manager, e3-content, e3-search, e3-manager-web
四、controller
重新启动e3-manager-web
后台报错:
这是因为ItemMapper.xml并没有复制到classes目录下。
再启动,后台报错,sell_point字段错误,排查原因
最后,导入成功