package com.paic.icore.ph.search.biz.service.impl;
import java.util.ArrayList;
import java.util.Date; import java.util.List;import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.params.ModifiableSolrParams; import org.apache.solr.common.params.SolrParams; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;import com.paic.icore.ph.search.biz.service.SearchUtilService;
import com.paic.icore.ph.search.dto.Condition; import com.paic.icore.ph.search.dto.SearchResultItem;import com.paic.icore.ph.util.DateUtil;
import com.paic.pafa.app.biz.service.BaseService; import com.sun.org.apache.bcel.internal.generic.NEW;/**
* * EX-GOUDINGCHENG001 * */ @Component("assemebleSearchResultUtil") public class AssemebleSearchResultUtil extends BaseService {// /**
// * 根据传入的Condition对象封装成为一个solrQuery // * // * con // * SolrQuery // */ public static ModifiableSolrParams assembleSolrCondtion(Condition con, ArrayList<String> deptList) { ModifiableSolrParams query = new ModifiableSolrParams(); SolrQuery filterQuery = new SolrQuery(); if (null == con.getKeyword()) { query.add("q", "keyword:*"); } else { query.add("q", "keyword:" + con.getKeyword() + ""); } if (null != con.getProffession()) { String string = con.getProffession().substring(0, con.getProffession().length()-1); filterQuery.addFilterQuery("pproffession:" + string + ""); }if (null != con.getFiletype()) {
filterQuery.addFilterQuery("filetype:" + con.getFiletype() + ""); }if (null != con.getProffession1()) {
String string = con.getProffession1().substring(0, con.getProffession1().length()-1); filterQuery.addFilterQuery("proffession:" + string + ""); } if (null == con.getOrganization() || "".equalsIgnoreCase(con.getOrganization())) {} else {
filterQuery.addFilterQuery("organization:" + con.getOrganization() + ""); } // 查询一天内的数据 if ("week".equalsIgnoreCase(con.getDuring())) { filterQuery.addFilterQuery("day:[NOW/DAY-7DAY TO NOW/DAY]"); } // 查询一周内的数据 if ("month".equalsIgnoreCase(con.getDuring())) { filterQuery.addFilterQuery("day:[NOW/DAY-1MONTH TO NOW/DAY]");}
// 查询近一年的数据 if ("year".equalsIgnoreCase(con.getDuring())) { filterQuery.addFilterQuery("day:[NOW/DAY-1YEAR TO NOW/DAY]"); }if ("heated".equalsIgnoreCase(con.getOderBy())) {
query.add("sort", "day desc"); } if ("atime".equalsIgnoreCase(con.getOderBy())) { query.add("sort", "day desc"); } if ("algorithm".equalsIgnoreCase(con.getOderBy())) { query.add("sort", "day desc"); } query.add("sort", "day desc"); int startRow = ((int) con.getPage() == 0) ? 0 : (con.getPage() - 1) * con.getMaxResults(); query.add("start", String.valueOf(startRow)); query.add("rows", String.valueOf(con.getMaxResults())); query.add(filterQuery); // 设置高亮信息// query.add("hl", "true");// 高亮开关
// query.add("hl.fl", "title,content");// 高亮返回字段 // query.add("hl.fragsize", "150");// 高亮字段长度,0代表返回全部 // query.add("hl.encoder", "html"); // query.add("hl.fragmenter", "regex"); // query.add("hl.useFastVectorHighlighter", "true"); // query.add("f.content.hl.alternateField", "description"); // query.add("f.content.hl.maxAlternateFieldLength", "150"); // 对经验的可见性进行处理if ("ROLE_PH_SYS_MANAGER".equalsIgnoreCase(con.getRolecode())) {
// 如果是超级管理员,全部可见 if ("all".equalsIgnoreCase(con.getType()) || null == con.getType()) { filterQuery.addFilterQuery("type:*"); } else { filterQuery.addFilterQuery("type:" + con.getType()); } } else if("ROLE_PH_DEPT_MANAGER".equalsIgnoreCase(con.getRolecode())){// String string="(NOT visiflag:1 AND ("; StringBuffer visibilitycontent = new StringBuffer(); if (deptList.size() > 0) { //如果指定的人可见中包含有自己的UMCODE visibilitycontent.append("visiInstitution:"+con.getUmCode()+" OR "); for (int i = 0; i < deptList.size(); i++) { visibilitycontent.append("visiInstitution:" + deptList.get(i).toString() + " OR "); } } else { //如果指定的人可见中包含有自己的UMCODE visibilitycontent.append("visiInstitution:"+con.getUmCode()+" OR "); visibilitycontent.append("visiInstitution:' '"); } if (deptList.size() > 0) { visibilitycontent.delete(visibilitycontent.length() - 3, visibilitycontent.length()); } visibilitycontent.append("))"); visibilitycontent.append("OR (visiflag:1)"); // 对用户所处的机构进行查询 处理结束 string += visibilitycontent.toString(); System.out.println("String:"+string);filterQuery.addFilterQuery(string);
if (null != con.getType()) { if ("all".equalsIgnoreCase(con.getType())) { filterQuery.addFilterQuery( "type:*"); } else { filterQuery.addFilterQuery("type:" + con.getType() + ""); } }}else if("ROLE_PH_KNG_MANAGER".equalsIgnoreCase(con.getRolecode())){
String string="(NOT visiflag:1 AND ("; StringBuffer visibilitycontent = new StringBuffer(); if (deptList.size() > 0) { //如果指定的人可见中包含有自己的UMCODE visibilitycontent.append("visiInstitution:"+con.getUmCode()+" OR "); for (int i = 0; i < deptList.size(); i++) { visibilitycontent.append("visiInstitution:" + deptList.get(i).toString() + " OR "); } } else { //如果指定的人可见中包含有自己的UMCODE visibilitycontent.append("visiInstitution:"+con.getUmCode()+" OR "); visibilitycontent.append("visiInstitution:' '"); } if (deptList.size() > 0) { visibilitycontent.delete(visibilitycontent.length() - 3, visibilitycontent.length()); } visibilitycontent.append("))"); visibilitycontent.append("OR (visiflag:1)"); // 对用户所处的机构进行查询 处理结束 string += visibilitycontent.toString(); System.out.println("String:"+string); String type=con.getType(); filterQuery.addFilterQuery(string); if (null != type) { if ("all".equalsIgnoreCase(con.getType())||null==con.getType()) { filterQuery.addFilterQuery( "type:wenwen OR type:yunpan OR (type:jingyan AND visiInstitution:"+con.getUmCode()+") OR user:"+con.getUmCode()+""); } else if("wenwen".equalsIgnoreCase(con.getType())) { filterQuery.addFilterQuery("type:"+con.getType()); }else if("jingyan".equalsIgnoreCase(con.getType())){ filterQuery.addFilterQuery("type:jingyan AND visiInstitution:"+con.getUmCode()); }else if("yunpan".equalsIgnoreCase(con.getType())){ filterQuery.addFilterQuery("type:"+con.getType()); } } }else if ("ROLE_PH_NORMAL".equalsIgnoreCase(con.getRolecode())) { if ("all".equalsIgnoreCase(con.getType()) || null == con.getType()) { filterQuery.addFilterQuery("type:*"); String string="visiInstitution:" + con.getUmCode() + " OR visiflag:1"; if (deptList.size() > 0) { //如果指定的人可见中包含有自己的UMCODE for (int i = 0; i < deptList.size(); i++) { string+=" OR visiInstitution:"+deptList.get(i); } } filterQuery.addFilterQuery(string); } else { filterQuery.addFilterQuery("type:" + con.getType()); String string="visiInstitution:" + con.getUmCode() + " OR visiflag:1"; if (deptList.size() > 0) { //如果指定的人可见中包含有自己的UMCODE for (int i = 0; i < deptList.size(); i++) { string+=" OR visiInstitution:"+deptList.get(i); } } //filterQuery.addFilterQuery("visiInstitution:" + con.getUmCode() + " OR visiflag:1"); filterQuery.addFilterQuery(string); } // filterQuery.addFilterQuery("type:" + con.getType() + ""); // filterQuery.addFilterQuery("visiInstitution:" + con.getUmCode() + " OR visiflag:1"); } query.add(filterQuery); System.out.println("query:" + query.toString()); return query; }/**
* 传入一个solrDocument封装成为一个SearchResultItem * * doc * @return SearchResultItem */ public SearchResultItem assembleWenwenResult(SolrDocument doc, QueryResponse response) { SearchResultItem item = new SearchResultItem(); if (null != doc.get("id")) { item.setId(doc.get("id").toString());// 设置ID } if (null != doc.get("title")) { item.setTitle(doc.get("title").toString());// 设置标题栏 } if (null != doc.get("user")) { item.setAskedBy(doc.get("user").toString());// 设置提问人 }if (null != doc.get("acontent")) {
item.setContent(doc.get("acontent").toString());}
if (null != doc.get("type")) {
item.setType(doc.get("type").toString()); } String proffesString = ""; if (null == doc.get("pproffession")) { proffesString += ""; } else { proffesString += doc.get("pproffession").toString(); } if (null == doc.get("proffession")) { proffesString += ""; } else { proffesString += doc.get("proffession").toString(); } item.setProffession(proffesString);Date showDate = (Date) doc.get("day");
String ttString = DateUtil.getShowDate(showDate); item.setPublishDateStr(DateUtil.getShowDate(showDate)); if (response.getHighlighting() != null && response.getHighlighting().get(item.getId()) != null) { List<String> highlightSnippets = response.getHighlighting() .get(item.getId()).get("title"); if (highlightSnippets != null) { item.setTitle(StringUtils.join(highlightSnippets.iterator(), "")); }}
if (response.getHighlighting() != null && response.getHighlighting().get(item.getId()) != null) { List<String> highlightSnippets = response.getHighlighting() .get(item.getId()).get("acontent"); if (highlightSnippets != null) { item.setContent(StringUtils.join(highlightSnippets.iterator(), "")); }}
if (response.getHighlighting() != null && response.getHighlighting().get(item.getId()) != null) { List<String> highlightSnippets = response.getHighlighting() .get(item.getId()).get("desc"); if (highlightSnippets != null) { item.setContent(StringUtils.join(highlightSnippets.iterator(), "")); }}
return item;
}public SearchResultItem assembleJinyanResult(SolrDocument doc,
QueryResponse response) { SearchResultItem item = new SearchResultItem(); if (null != doc.get("id")) { item.setId(doc.get("id").toString());// 设置ID } if (null != doc.get("title")) { item.setTitle(doc.get("title").toString());// 设置标题栏 } if (null != doc.get("user")) { item.setAskedBy(doc.get("user").toString());// 设置提问人 }if (null != doc.get("desc")) {
item.setContent(doc.get("desc").toString()); }if (null != doc.get("type")) {
item.setType(doc.get("type").toString());
} if (null != doc.get("day")) { Date showDate = (Date) doc.get("day"); String ttString = DateUtil.getShowDate(showDate); item.setPublishDateStr(DateUtil.getShowDate(showDate));}
String proffesString = ""; if (null == doc.get("pproffession")) { proffesString += ""; } else { proffesString += doc.get("pproffession").toString(); } if (null == doc.get("proffession")) { proffesString += ""; } else { proffesString += doc.get("proffession").toString(); } item.setProffession(proffesString); if (response.getHighlighting() != null && response.getHighlighting().get(item.getId()) != null) { List<String> highlightSnippets = response.getHighlighting() .get(item.getId()).get("title"); if (highlightSnippets != null) { item.setTitle(StringUtils.join(highlightSnippets.iterator(), "")); }}
if (response.getHighlighting() != null && response.getHighlighting().get(item.getId()) != null) { List<String> highlightSnippets = response.getHighlighting() .get(item.getId()).get("acontent"); if (highlightSnippets != null) { item.setContent(StringUtils.join(highlightSnippets.iterator(), "")); } } if (response.getHighlighting() != null && response.getHighlighting().get(item.getId()) != null) { List<String> highlightSnippets = response.getHighlighting() .get(item.getId()).get("desc"); if (highlightSnippets != null) { item.setContent(StringUtils.join(highlightSnippets.iterator(), "")); } }return item;
}
public SearchResultItem assembleYunpanResult(SolrDocument doc, QueryResponse response) { SearchResultItem item = new SearchResultItem(); if (null != doc.get("id")) { item.setId(doc.get("id").toString());// 设置ID } if (null != doc.get("title")) {item.setTitle(doc.get("title").toString());// 设置标题栏
} if (null != doc.get("user")) {item.setAskedBy(doc.get("user").toString());// 设置提问人
}if (null != doc.get("desc")) {
item.setContent(doc.get("desc").toString());
}if (null != doc.get("type")) {
item.setType(doc.get("type").toString()); } if (null != doc.get("day")) { Date showDate = (Date) doc.get("day"); String ttString = DateUtil.getShowDate(showDate); item.setPublishDateStr(DateUtil.getShowDate(showDate));}
String proffesString = ""; if (null == doc.get("pproffession")) { proffesString += ""; } else { proffesString += doc.get("pproffession").toString(); } if (null == doc.get("proffession")) { proffesString += ""; } else { proffesString += doc.get("proffession").toString(); } item.setProffession(proffesString); if (response.getHighlighting() != null && response.getHighlighting().get(item.getId()) != null) { List<String> highlightSnippets = response.getHighlighting() .get(item.getId()).get("title"); if (highlightSnippets != null) { item.setTitle(StringUtils.join(highlightSnippets.iterator(), "")); }}
if (response.getHighlighting() != null && response.getHighlighting().get(item.getId()) != null) { List<String> highlightSnippets = response.getHighlighting() .get(item.getId()).get("acontent"); if (highlightSnippets != null) { item.setContent(StringUtils.join(highlightSnippets.iterator(), "")); } } if (response.getHighlighting() != null && response.getHighlighting().get(item.getId()) != null) { List<String> highlightSnippets = response.getHighlighting() .get(item.getId()).get("desc"); if (highlightSnippets != null) { item.setContent(StringUtils.join(highlightSnippets.iterator(), "")); } }return item;
}
}