admin
2021-03-02 4011b8d0b377af33e2bc435f7726329630d706cb
src/main/java/com/yeshi/buwan/service/manager/SolrAlbumDataManager.java
@@ -20,21 +20,19 @@
import org.springframework.data.solr.core.query.Criteria;
import org.springframework.data.solr.core.query.Query;
import org.springframework.data.solr.core.query.SimpleQuery;
import org.springframework.data.solr.core.query.SolrDataQuery;
import org.springframework.data.solr.core.query.result.ScoredPage;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
 * 搜索引擎-专辑数据管理
 */
@Component
public class SolrAlbumDataManager {
    private final static String CORE_NAME = "buwan_album";
    private final Logger logger = LoggerFactory.getLogger(SolrAlbumDataManager.class);
@@ -52,11 +50,11 @@
    public void saveOrUpdate(VideoInfo videoInfo) {
        UpdateResponse updateResponse = solrTemplate.saveBean(SolrVideoFactory.create(videoInfo, videoInfo.getResourceList()));
        UpdateResponse updateResponse = solrTemplate.saveBean(CORE_NAME, SolrVideoFactory.create(videoInfo, videoInfo.getResourceList()));
        if (updateResponse.getStatus() == 0) {
            solrTemplate.commit();
            solrTemplate.commit(CORE_NAME);
        } else {
            solrTemplate.rollback();
            solrTemplate.rollback(CORE_NAME);
        }
    }
@@ -65,62 +63,77 @@
        for (VideoInfo vi : videoInfoList) {
            solrVideoList.add(SolrVideoFactory.create(vi, vi.getResourceList()));
        }
        UpdateResponse updateResponse = solrTemplate.saveBeans(solrVideoList);
        UpdateResponse updateResponse = solrTemplate.saveBeans(CORE_NAME, solrVideoList);
        if (updateResponse.getStatus() == 0) {
            solrTemplate.commit();
            solrTemplate.commit(CORE_NAME);
        } else {
            solrTemplate.rollback();
            solrTemplate.rollback(CORE_NAME);
        }
    }
    /**
     *删除所有
     * 删除所有
     */
    public void clear() {
        Query query = new SimpleQuery("name:*");
        UpdateResponse updateResponse = solrTemplate.delete(query);
        if (updateResponse.getStatus() == 0) {
            solrTemplate.commit();
        } else {
            solrTemplate.rollback();
        }
    }
//    public void clear() {
//        Query query = new SimpleQuery("name:*");
//        UpdateResponse updateResponse = solrTemplate.delete(query);
//        if (updateResponse.getStatus() == 0) {
//            solrTemplate.commit();
//        } else {
//            solrTemplate.rollback();
//        }
//    }
    public void deleteById(String id) {
        UpdateResponse updateResponse = solrTemplate.deleteById(id);
        UpdateResponse updateResponse = solrTemplate.deleteByIds(CORE_NAME, id);
        if (updateResponse.getStatus() == 0) {
            solrTemplate.commit();
            solrTemplate.commit(CORE_NAME);
        } else {
            solrTemplate.rollback();
            solrTemplate.rollback(CORE_NAME);
        }
    }
    public SolrVideo findOne(String id) {
        SolrVideo solrVideo = solrTemplate.getById(id, SolrVideo.class);
        return solrVideo;
        Optional<SolrVideo> solrVideo = solrTemplate.getById(CORE_NAME, id, SolrVideo.class);
        return solrVideo.get();
    }
    public SolrResultDTO find(SolrVideoSearchFilter filter, int page, int pageSize) {
        if (filter.getKey() == null) {
            filter.setKey("");
        }
        logger.info(filter.getKey() + "#" + page);
        Query query = new SimpleQuery("name:\"" + filter.getKey() + "\"");
        Query query = null;
        if (!StringUtil.isNullOrEmpty(filter.getKey())) {
            //solr精准检索需要带引号
            query = new SimpleQuery("name:\"" + filter.getKey() + "\"");
        } else {
            query = new SimpleQuery();
        }
        Criteria criteria = new Criteria("contenttype").is(filter.getContentType());
        if (filter.getVideoType() != null) {
            criteria = criteria.and("root_video_type").is(filter.getVideoType());
        }
        if (filter.getActor() != null) {
            criteria = criteria.and("mainactor").expression("\"" + filter.getActor() + "\"");
        }
        if (filter.getDirector() != null) {
            criteria = criteria.and("director").expression("\"" + filter.getDirector() + "\"");
        }
        if (filter.getResourceIds() != null && filter.getResourceIds().length > 0) {
            criteria = criteria.and("resourceIds").contains(filter.getResourceIds());
        }
        /** 添加条件 */
        if (criteria != null)
            query.addCriteria(criteria);
        /** 设置分页开始记录数(第一页) 默认0 */
        query.setOffset((page - 1) * pageSize);
        query.setOffset((page - 1) * pageSize * 1L);
        /** 设置每页显示记录数,默认10 */
        query.setRows(pageSize);
        if (StringUtil.isNullOrEmpty(filter.getSortKey())) {
@@ -128,7 +141,7 @@
        } else {
            query.addSort(new Sort(Sort.Direction.DESC, filter.getSortKey()));
        }
        ScoredPage<SolrVideo> result = solrTemplate.queryForPage(query, SolrVideo.class);
        ScoredPage<SolrVideo> result = solrTemplate.queryForPage(CORE_NAME, query, SolrVideo.class);
        System.out.println("总记录数:" + result.getTotalElements());
        List<SolrVideo> list = result.getContent();
        return new SolrResultDTO(list, (int) result.getTotalElements());
@@ -137,10 +150,10 @@
    public List<String> getSuggestKeyList(String key) {
        Query query = new SimpleQuery("name:\"" + key + "\"");
        /** 设置分页开始记录数(第一页) 默认0 */
        query.setOffset(0);
        query.setOffset(0L);
        /** 设置每页显示记录数,默认10 */
        query.setRows(10);
        ScoredPage<SolrVideo> result = solrTemplate.queryForPage(query, SolrVideo.class);
        ScoredPage<SolrVideo> result = solrTemplate.queryForPage(CORE_NAME, query, SolrVideo.class);
        System.out.println("总记录数:" + result.getTotalElements());
        List<SolrVideo> list = result.getContent();
        List<String> keyList = new ArrayList<>();
@@ -158,31 +171,35 @@
        long count = albumVideoMapService.countAll();
        int pageSize = 100;
        int pageCount = (int) (count % pageSize == 0 ? count / pageSize : count / pageSize + 1);
        for (int i = 3; i < pageCount; i++) {
            List<String> videoIds = new ArrayList<>();
            List<AlbumVideoMap> albumVideoMapList = albumVideoMapService.listAll(i + 1, pageSize);
            for (AlbumVideoMap map : albumVideoMapList) {
                videoIds.add(map.getVideoId());
            }
            List<VideoInfo> videoList = videoInfoService.listByVideoIds(videoIds);
            //获取资源ID
            List<ResourceVideo> rvList = resourceVideoService.getResourceList(videoList);
            Map<String, List<VideoResource>> map = new HashMap<>();
            for (ResourceVideo rv : rvList) {
                if (rv.getVideo() != null && rv.getResource() != null) {
                    if (map.get(rv.getVideo().getId()) == null)
                        map.put(rv.getVideo().getId(), new ArrayList<>());
                    map.get(rv.getVideo().getId()).add(rv.getResource());
        for (int i = 0; i < pageCount; i++) {
            try {
                List<String> videoIds = new ArrayList<>();
                List<AlbumVideoMap> albumVideoMapList = albumVideoMapService.listAll(i + 1, pageSize);
                for (AlbumVideoMap map : albumVideoMapList) {
                    videoIds.add(map.getVideoId());
                }
            }
            for (VideoInfo vi : videoList) {
                if (map.get(vi.getId()) != null) {
                    vi.setResourceList(map.get(vi.getId()));
                }
            }
                List<VideoInfo> videoList = videoInfoService.listByVideoIds(videoIds);
            saveOrUpdate(videoList);
                //获取资源ID
                List<ResourceVideo> rvList = resourceVideoService.getResourceList(videoList);
                Map<String, List<VideoResource>> map = new HashMap<>();
                for (ResourceVideo rv : rvList) {
                    if (rv.getVideo() != null && rv.getResource() != null) {
                        if (map.get(rv.getVideo().getId()) == null)
                            map.put(rv.getVideo().getId(), new ArrayList<>());
                        map.get(rv.getVideo().getId()).add(rv.getResource());
                    }
                }
                for (VideoInfo vi : videoList) {
                    if (map.get(vi.getId()) != null) {
                        vi.setResourceList(map.get(vi.getId()));
                    }
                }
                saveOrUpdate(videoList);
            } catch (Exception e) {
                logger.error("专辑搜索引擎数据同步失败");
            }
        }
    }