springboot整合solr

package com.tj.dr.service.impl;
import com.alibaba.dubbo.config.annotation.Reference;
import com.tj.dr.common.tools.Common;
import com.tj.dr.common.tools.PageUtils;
import com.tj.dr.dao.SearchMapper;
import com.tj.dr.interfaces.config.ConfigInterface;
import com.tj.dr.interfaces.user.UserInterfaces;
import com.tj.dr.model.trade.dto.SearchGoodsDto;
import com.tj.dr.model.trade.vo.GoodsClassNameVo;
import com.tj.dr.model.user.RedpigmallAccessory;
import com.tj.dr.service.SearchService;
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.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@Service
public class SearchServiceImpl implements SearchService {
    @Autowired
    private SearchMapper searchMapper;
    @Autowired
    private SolrClient solrClient;
    @Reference(version = "1.0")
    private UserInterfaces userInterfaces;
    @Reference(version = "1.0")
    private ConfigInterface configInterface;
    /**
     * 更新索引库所有索引
     */
    @Override
    public void importAllIndex() {
        try {
            List<SearchGoodsDto> searchGoodsDtos = searchMapper.selectByGoodsList();
            List<SolrInputDocument> documents = new ArrayList<>();
            for (SearchGoodsDto goods : searchGoodsDtos) {
                SolrInputDocument document = new SolrInputDocument();
                document.addField("id", goods.getId());
                document.addField("goodsName", goods.getGoodsName());
                String price = goods.getGoodsPrice().toString();
                document.addField("goodsPrice", price);
                String url = null;
                if (!Common.isEmpty(goods.getGoodsMainPhotoId())) {
                    RedpigmallAccessory pic = userInterfaces.getRedpigmallAccessoryById(Long.valueOf(goods.getGoodsMainPhotoId()));
                    url = configInterface.getSysConfig().getDetail().getImagewebserver() + pic.getPath() + "/"
                            + pic.getName();
                }
                document.addField("goodsMainPhotoId", url);
                documents.add(document);
            }
            solrClient.add(documents);
            solrClient.commit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 分页查询商品
     *
     * @param name
     * @param currentPage
     * @param pageSize
     * @return
     */
    @Override
    public PageUtils query(String name, int currentPage, int pageSize) throws IOException, SolrServerException {
        SolrQuery params = new SolrQuery();
        //查询条件
        params.set("q", "goodsName:" + name);
        //这里的分页和mysql分页一样
        params.set("start", (currentPage - 1) * pageSize);
        params.set("rows", pageSize);
        params.set("wt", "json");
        QueryResponse query = solrClient.query(params);
        //查询结果
        SolrDocumentList results = query.getResults();
        List<GoodsClassNameVo> list = new ArrayList<>();
        for (SolrDocument result : results) {
            GoodsClassNameVo searchGoodsDto = new GoodsClassNameVo();
            searchGoodsDto.setId(Long.valueOf(result.get("id").toString()));
            searchGoodsDto.setGoodsName(String.valueOf(result.get("goodsName")));
            BigDecimal goodsPrice = new BigDecimal(result.get("goodsPrice").toString());
            searchGoodsDto.setGoodsPrice(goodsPrice);
            if (null!=result.get("goodsMainPhotoId")){
                searchGoodsDto.setIcon(result.get("goodsMainPhotoId").toString());
            }
            list.add(searchGoodsDto);
        }
        //搜索总数
        long found = results.getNumFound();
        //搜索开始
        long start = results.getStart();
        PageUtils<GoodsClassNameVo> pageUtils = new PageUtils<>();
        pageUtils.setPageNum(currentPage);
        pageUtils.setPageSize(pageSize);
        pageUtils.setTotalNum(Integer.valueOf(String.valueOf(found)));
        pageUtils.setPageCount(Integer.valueOf(String.valueOf(found / pageSize == 0 ? found / pageSize : found / pageSize + 1)));
        pageUtils.setIsMore(found - start > pageSize ? 1 : 0);
        pageUtils.setItems(list);
        return pageUtils;
    }
    /**
     * @param
     * @author: xxx
     * Description:添加单个商品索引
     * @Date: 22:54 2016/5/3
     */
    @Override
    public void addGoodsIndex(SearchGoodsDto searchGoodsDto) throws IOException, SolrServerException {
        RedpigmallAccessory pic = userInterfaces.getRedpigmallAccessoryById(Long.valueOf(searchGoodsDto.getGoodsMainPhotoId()));
        String url = null;
        if (pic != null) {
            url = configInterface.getSysConfig().getDetail().getImagewebserver() + pic.getPath() + "/"
                    + pic.getName();
        }
        SolrInputDocument document = new SolrInputDocument();
        document.addField("id", searchGoodsDto.getId());
        document.addField("goodsName", searchGoodsDto.getGoodsName());
        String price = searchGoodsDto.getGoodsPrice().toString();
        document.addField("goodsPrice", price);
        document.addField("goodsMainPhotoId", url);
        solrClient.add(document);
        solrClient.commit();
    }
    /**
     * @param
     * @param ids
     * @author: xxx
     * Description: 根据id批量删除
     * @Date: 22:42 2016/5/3
     */
    @Override
    public void deleteGoodsIndex(String[] ids) throws IOException, SolrServerException {
        List list = new ArrayList<>();
        for (String id : ids) {
            list.add(id);
        }
        solrClient.deleteById(list);
        solrClient.commit();
    }
}

猜你喜欢

转载自blog.csdn.net/tomcatandoracle/article/details/80306587