package solr.search; import java.util.HashMap; import java.util.List; import java.util.Map; 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.springframework.stereotype.Service; 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.MongoFollowingDao; import com.xiaozhi.blog.mongo.MongoUserDao; import com.xiaozhi.blog.utils.Collections3; import com.xiaozhi.blog.utils.SolrPage; import com.xiaozhi.blog.vo.User; //@Service("userSolrQueryClient") public class UserSolrQueryClient extends SolrQueryImpl<UserData> implements SolrQueryService<UserData>{ private static Log logger = LogFactory.getLog(UserSolrQueryClient.class); @Autowired @Qualifier("userSearchServer") private HttpSolrServer userSearchServer; @Autowired private MongoUserDao mongoUserDao; @Autowired private MongoFollowingDao mongoFollowingDao; @Override public SolrPage<UserData> query(String uid,String keyword,int page,int pageSize,boolean isFacet) throws Exception{ int startIndex = (page-1)*pageSize; //设置查询字段和条件 Map<String, String> propertyMap = new HashMap<String, String>(); propertyMap.put("text", keyword); //排序有顺序,使用TreeMap,如果没排序,则是默认按照score排序 // Map<String, String> compositorMap = new TreeMap<String, String>(); // compositorMap.put("cul_rid", "desc"); SolrResult<UserData> items = this.query(propertyMap, null, null,UserData.class, startIndex, pageSize,isFacet); return new SolrPage<UserData>(startIndex, startIndex+pageSize-1, items); } @Override public SolrPage<UserData> queryHightLighting(String uid,String keyword,int page,int pageSize,boolean isFacet) throws Exception{ int startIndex = (page-1)*pageSize; //设置查询字段和条件 Map<String, String> propertyMap = new HashMap<String, String>(); propertyMap.put("text", keyword); //propertyMap.put("company", "公司"); //获取关注集合 List<String> followingList = this.mongoFollowingDao.getFollowings(uid); //设置高亮字段 String[] highlightArray = new String[]{"nickname","company","school"}; SolrResult<UserData> items = this.query(propertyMap, null, highlightArray,UserData.class, startIndex, pageSize,isFacet); UserData index= null; if(null!=items && null!=items.getDocs()){ Map<String, Map<String, List<String>>> highlightMap = items.getHighlightMap(); if(null!=items.getDocs()){ int i=0; List<String> ids = Collections3.extractToList(items.getDocs(), "id"); Map<String, User> userMap = mongoUserDao.getUsersByIds(ids); for(UserData doc:items.getDocs()){ if(doc.getId().equals(uid)){//排除自己 index = doc; continue; } User user = userMap.get(doc.getId()); if(user==null)continue; if(followingList.contains(user.getId().toString())){//判断是否已关注 user.setLink(true); }else{ user.setLink(false); } BeanUtils.copyProperties(user, doc, highlightArray); if(highlightMap!=null && highlightMap.containsKey(doc.getId())){ for(String field:highlightArray){ List<String> values = highlightMap.get(doc.getId()).get(field); if(null!=values) SolrjCommonUtil.invokSetMethod(doc,field,values.get(0)); } } i++; } } } if(null!=index)items.getDocs().remove(index);//排除自己 return new SolrPage<UserData>(startIndex, startIndex+pageSize-1, items); } @PostConstruct public void init() { this.setCommonsHttpSolrServer(this.userSearchServer); } @Override public SolrPage<UserData> query(String keyword, int page, int pageSize, boolean isFacet) throws Exception { // TODO Auto-generated method stub return null; } @Override public SolrPage<UserData> queryHightLighting(String keyword, int page, int pageSize, boolean isFacet) throws Exception { // TODO Auto-generated method stub return null; } }