solr建索引

/**
* 索引试卷的记录
*/
public void examPaper(){
// 创建客户端.
SolrServer server = new HttpSolrServer(getSolrServer());
List<SearchResourceVo> ResourceSearchVoList= new ArrayList<SearchResourceVo>();
// 索引试卷的记录.
Long examPaperCount = examPaperDao.getExamPaperNumber();
Long examPaperCountPageCount = examPaperCount / pageSize;
if (examPaperCount % pageSize > 0){
examPaperCountPageCount++;
}
for (int i = 0; i < examPaperCountPageCount; i++){
try {
ResourceSearchVoList = initExamPaperIndex(i, pageSize) ;
if(null != ResourceSearchVoList && ResourceSearchVoList.size()>0){
server.addBeans(ResourceSearchVoList);
server.commit();
ResourceSearchVoList=null;
System.out.println("试卷"+"----"+i);
}
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("索引试卷数据完成");
}


private List<SearchResourceVo> initExamPaperIndex(int page,int size) throws Exception {
List<SearchResourceVo> searchResourceVoList =new ArrayList<SearchResourceVo>();
Query query = new Query();
query.setPageNum(page);
query.setNumPerPage(size);
PageFinder<ExamPaper> pageFinder = examPaperDao.findExamPaperIndexByPage(query);
if(null != pageFinder && null != pageFinder.getDataList() && pageFinder.getDataList().size()> 0 ){
List<ExamPaper> pf = pageFinder.getDataList();
for (ExamPaper kr : pf) {
SearchResourceVo vo = convert(kr);
if(null != vo && StringUtils.isNotBlank(vo.getId())){
searchResourceVoList.add(vo);
}
}
pf.clear();
}
return searchResourceVoList;
}






@SuppressWarnings("rawtypes")
public PageFinder getSearchResult(SearchResourceQuery query)
throws Exception {
if (query == null) {
return null;
}
SolrQuery solrQuery=querySolrQueryByKeyword(query,Constant.QUERY_KERWORD_WEB_TYPE);
SolrServer server = new HttpSolrServer(getSolrServer());
QueryResponse queryResponse = server.query(solrQuery);
SolrDocumentList solrDocumentList = queryResponse.getResults();
List<ResourceMarkeSearchVo> res = new ArrayList<ResourceMarkeSearchVo>();
int totalCount = (int)solrDocumentList.getNumFound();
PageFinder p = new PageFinder(query.getPageNo(), totalCount,query.getPageSize());
ResourceMarkeSearchVo vo =new ResourceMarkeSearchVo();
SolrDocument solrDocument=new SolrDocument();
for (int i = 0; i < solrDocumentList.size(); i++) {
solrDocument =solrDocumentList.get(i);
vo = toSearchResourceVo(solrDocument);
res.add(vo);
solrDocument=null;
vo=null;
}
if(query.getKeywords()!=null&&isUUID(query.getKeywords())&&query.getType()==3){
if(res.size()==0){
p=null;
p=getSearchResult_val(query);
}else{
p.setList(res);
}
}else{
p.setList(res);
}
return p;
}


 /**
     * <资源市场App中市场资源按学科、学段、关键字模糊查询.>
     * <功能详细描述>
     * @param query
     * @return [参数说明]
     * 
     */
    private SolrQuery getAppSolrQuery(SearchResourceQuery query) {
        SolrQuery solrQuery = new SolrQuery();
        int firstResult = (query.getPageNo() - 1) * query.getPageSize();
        String queryString = "(className:" + SearchResourceVo.class.getName();
        String knowsName = query.getKnowsName();
        String subjectId = query.getSubjectId();
        String periodId = query.getPeriodId();
        String keyWords= query.getKeywords();
        //包含当前节点的子节点进行查询
        String[] knowsNameStrings = null;
        if (StringUtils.isNotBlank(knowsName)) {
            knowsNameStrings = StringUtils.split(knowsName, ",");
        }
        if (StringUtils.isNotEmpty(subjectId)) {
            queryString += " AND subjectId:" + subjectId.trim();
        }
        if (StringUtils.isNotEmpty(periodId)) {
            queryString += " AND peroidId:" + periodId.trim();
        }
        String kString = "";
        if (knowsNameStrings != null) {
            
            for (int i = 0; i < knowsNameStrings.length; i++) {
                kString += "knowSeries:" + "*" + knowsNameStrings[i] + "*"
                        + " OR" + " ";
                if (i > 100) {
                    break;
                }
            }
            kString = kString.substring(0, kString.length() - 4);
        }
        if (StringUtils.isNotBlank(kString)) {
            queryString += " AND (" + kString + ")";
        }
        if (query.getType() != null) {
            if (query.getType().intValue() == 100) {
                queryString += " AND time:["
                        + DateUtil.getDateBefore(new Date(), 3).getTime()
                        + "TO" + new Date().getTime() + "]";
            }
            else {
                queryString += " AND type:" + query.getType();
            }
            if (query.getType().intValue() == 3) {
                if (StringUtils.isNotBlank(query.getExerciseType())
                        && !query.getExerciseType().equalsIgnoreCase("全部")) {
                    queryString += " AND exerciseType:"
                            + query.getExerciseType();
                }
                if (StringUtils.isNotBlank(query.getLevel())
                        && !query.getLevel().equalsIgnoreCase("全部")) {
                    queryString += " AND exerciseLevel:" + query.getLevel();
                }
            }
        }
        if (StringUtils.isNotEmpty(keyWords)) {
            query.setKeywords(keyWords.trim());
            queryString += " AND (name:" + query.getKeywords().trim() + ") ";
        }
        queryString += ")";
        solrQuery.setQuery(queryString);
        if (query.getOrder() != null) {
            if (query.getOrder().equals(0)) {
                solrQuery.addSortField("name", ORDER.asc);
            }
            else if (query.getOrder().equals(1)) {
                solrQuery.addSortField("name", ORDER.desc);
            }
            else if (query.getOrder().equals(2)) {
                solrQuery.addSortField("time", ORDER.asc);
            }
            else if (query.getOrder().equals(3)) {
                solrQuery.addSortField("time", ORDER.desc);
            }
        }
        
        solrQuery.setParam("start", String.valueOf(firstResult));
        solrQuery.setRows(query.getPageSize());
        
        return solrQuery;
    }




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tony168hongweigan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值