package solr.search; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import javax.annotation.PostConstruct; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.solr.client.solrj.impl.HttpSolrServer; import com.xiaozhi.blog.mongo.MongoBlogDao; import com.xiaozhi.blog.utils.Collections3; import com.xiaozhi.blog.utils.SolrPage; import com.xiaozhi.blog.vo.WebPost; //@Service("blogSolrQueryClient") public class BlogSolrQueryClient extends SolrQueryImpl<BlogData> implements SolrQueryService<BlogData>{ private static Log logger = LogFactory.getLog(BlogSolrQueryClient.class); @Autowired @Qualifier("blogSearchServer") private HttpSolrServer blogSearchServer; @Autowired private MongoBlogDao mongoBlogDao; @Override public SolrPage<BlogData> query(String keyword,int page,int pageSize,boolean isFacet) throws Exception{ int startIndex = (page-1)*pageSize; //设置查询字段和条件 Map<String, String> propertyMap = new ConcurrentHashMap<String, String>(); propertyMap.put("text", keyword); //排序有顺序,使用TreeMap,如果没排序,则是默认按照score排序 // Map<String, String> compositorMap = new TreeMap<String, String>(); // compositorMap.put("cul_rid", "desc"); SolrResult<BlogData> items = this.query(propertyMap, null, null,BlogData.class, startIndex, pageSize,isFacet); return new SolrPage<BlogData>(startIndex, startIndex+pageSize-1, items); } @Override public SolrPage<BlogData> queryHightLighting(String keyword,int page,int pageSize,boolean isFacet) throws Exception{ int startIndex = (page-1)*pageSize; //设置查询字段和条件 Map<String, String> propertyMap = new ConcurrentHashMap<String, String>(); propertyMap.put("text", keyword); //设置高亮字段 String[] highlightArray = new String[]{"content","forwardcontent"}; String[] fields = new String[]{"blogcontent","forwardcontent"}; SolrResult<BlogData> items = this.query(propertyMap, null, highlightArray,BlogData.class, startIndex, pageSize,isFacet); if(null!=items && null!=items.getDocs()){ Map<String, Map<String, List<String>>> highlightMap = items.getHighlightMap(); List<String> idList= new ArrayList<String>();//转发微博id集合 List<String> keys = Collections3.extractToList(items.getDocs(), "blogid");//微博id集合 Map<String,WebPost> postMap = mongoBlogDao.convertrelayPidsToPosts(keys);//获取当前页微博集合 for(BlogData doc:items.getDocs()){ WebPost webPost = postMap.get(doc.getBlogid()); if(webPost==null)continue; if(webPost.getTransmitid()!=null)idList.add(webPost.getTransmitid()); BeanUtils.copyProperties(webPost, doc, fields); if(highlightMap!=null && highlightMap.containsKey(doc.getBlogid())){ for(String field:fields){ List<String> values = highlightMap.get(doc.getBlogid()).get(field.equals("blogcontent")==true?"content":field); if(null!=values) { SolrjCommonUtil.invokSetMethod(doc,field,values.get(0)); } } } } Map<String,WebPost> transmitMap = mongoBlogDao.convertrelayPidsToPosts(idList);//获取当前页转发微博转发内容 for(BlogData doc:items.getDocs()){ if(doc.getTransmitid()!=null)doc.setWebPost(transmitMap.get(doc.getTransmitid())); } } SolrPage<BlogData> solrPage = new SolrPage<BlogData>(startIndex, startIndex+pageSize-1, items); //if(logger.isDebugEnabled())logger.debug("-------------------->solrPage :"+solrPage); return solrPage; } @PostConstruct public void init() { this.setCommonsHttpSolrServer(this.blogSearchServer); } @Override public SolrPage<BlogData> query(String uid, String keyword, int page, int pageSize, boolean isFacet) throws Exception { // TODO Auto-generated method stub return null; } @Override public SolrPage<BlogData> queryHightLighting(String uid, String keyword, int page, int pageSize, boolean isFacet) throws Exception { // TODO Auto-generated method stub return null; } }