Solr之——Demo实现

来源:互联网 发布:用plsql导入excel数据 编辑:程序博客网 时间:2024/06/06 13:13

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/50456063

不多说了,直接上代码:

package com.cpf.service;    import java.io.IOException;  import java.net.MalformedURLException;  import java.util.ArrayList;  import java.util.Iterator;  import java.util.List;  import java.util.Map;    import javax.faces.FactoryFinder;    import org.apache.lucene.document.Document;  import org.apache.solr.client.solrj.SolrQuery;  import org.apache.solr.client.solrj.SolrServer;  import org.apache.solr.client.solrj.SolrServerException;  import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;  import org.apache.solr.client.solrj.response.FacetField;  import org.apache.solr.client.solrj.response.QueryResponse;  import org.apache.solr.common.SolrDocument;  import org.apache.solr.common.SolrDocumentList;  import org.apache.solr.common.SolrInputDocument;    import com.cpf.model.Good;      public class SolrService {       private static SolrServer solrServer;       public  SolrService(String solrUrl){           try {              solrServer= new CommonsHttpSolrServer(solrUrl);          } catch (MalformedURLException e) {              e.printStackTrace();          }       }              public void createIndexs(List<Good> list){           List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();           for(Good good :list){               SolrInputDocument doc= new SolrInputDocument();                doc.addField("id", good.getGood_id());               doc.addField("merchant_id", good.getGood_id());               doc.addField("region_id", good.getRegion_id());               doc.addField("good_name", good.getGood_name());               doc.addField("good_no", good.getGood_no());               doc.addField("barcode", good.getBarcode());               doc.addField("good_desc", good.getGood_desc());               doc.addField("price", good.getPrice());               doc.addField("num", good.getNum());               doc.addField("typeId", good.getTypeId());               doc.addField("typeName", good.getTypeName());               docs.add(doc);           }           try {              solrServer.add(docs);              solrServer.optimize();              solrServer.commit();          } catch (Exception e) {                        e.printStackTrace();          }                   }       public List<Good> search(String key){           List<Good> goodList= new ArrayList<Good>();           SolrQuery query= new SolrQuery();           query.setQuery("good_desc:"+key);           query.setRows(20);           query.setHighlight(true);              // 设置高亮区域           query.addHighlightField("good_desc");              // 设置高亮区域前缀           query.setHighlightSimplePre("<font color=\"red\">");              // 设置高亮区域后缀           query.setHighlightSimplePost("</font>");          // query.setFacet(true);           QueryResponse rsp = null;              try {                  rsp = solrServer.query(query);                            } catch (SolrServerException e) {                  e.printStackTrace();              }              SolrDocumentList documentList=rsp.getResults();              @SuppressWarnings("unused")              Map<String, Map<String,List<String>>> map=rsp.getHighlighting();                            Iterator<SolrDocument> list=documentList.iterator();                            while(list.hasNext()){                  SolrDocument doucment=list.next();                  Good good= new Good();                  String goodId=String.valueOf(doucment.get("id"));                  String goodName=(String) doucment.get("good_name");                  String goodDesc=(String) doucment.get("good_desc");                  if(map.get(goodId)!=null && map.get(goodId).size()>0){                      if(map.get(goodId).get("good_desc")!=null){                          goodDesc=map.get(goodId).get("good_desc").get(0);                      }                  }                  good.setGood_id(Integer.parseInt(goodId));                  good.setGood_name(goodName);                  good.setGood_desc(goodDesc);                  goodList.add(good);              }                         return goodList;       }       public void delIndex(){           try {              solrServer.deleteByQuery("*:*");              solrServer.commit();//要记得提交数据          } catch (Exception e) {              e.printStackTrace();          }        }      public static SolrServer getSolrServer() {          return solrServer;      }      public static void setSolrServer(SolrServer solrServer) {          SolrService.solrServer = solrServer;      }         }  
import java.lang.reflect.Field;  import java.lang.reflect.Method;  import java.net.MalformedURLException;  import java.util.ArrayList;  import java.util.List;  import java.util.Map;  import java.util.TreeMap;    import org.apache.solr.client.solrj.SolrQuery;  import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;  import org.apache.solr.client.solrj.response.QueryResponse;  import org.apache.solr.common.SolrDocumentList;    public class SolrHttpServer {      //private Logger logger = LoggerFactory.getLogger(this.getClass());      private final static String URL = "http://localhost:8080/solr";      private final static Integer SOCKE_TTIMEOUT = 1000; // socket read timeout      private final static Integer CONN_TIMEOUT = 100;      private final static Integer MAXCONN_DEFAULT = 100;      private final static Integer MAXCONN_TOTAL = 100;      private final static Integer MAXRETRIES = 1;      private static CommonsHttpSolrServer server = null;      private final static String ASC = "asc";            public void init() throws MalformedURLException {              server = new CommonsHttpSolrServer( URL );              //server.setParser(new XMLResponseParser());              server.setSoTimeout(SOCKE_TTIMEOUT);              server.setConnectionTimeout(CONN_TIMEOUT);              server.setDefaultMaxConnectionsPerHost(MAXCONN_DEFAULT);              server.setMaxTotalConnections(MAXCONN_TOTAL);              server.setFollowRedirects(false);              server.setAllowCompression(true);              server.setMaxRetries(MAXRETRIES);      }            public static SolrDocumentList query(Map<String, String> property, Map<String, String> compositor, Integer pageSize) throws Exception {          SolrQuery query = new SolrQuery();          // 设置搜索字段          if(null == property) {              throw new Exception("搜索字段不可为空!");          } else {              for(Object obj : property.keySet()) {                  StringBuffer sb = new StringBuffer();                  sb.append(obj.toString()).append(":");                  sb.append(property.get(obj));                  String sql = (sb.toString()).replace("AND", " AND ").replace("OR", " OR ").replace("NOT", " NOT ");                  query.setQuery(sql);              }          }          // 设置结果排序          if(null != compositor) {              for(Object obj : compositor.keySet()) {                  if(ASC == compositor.get(obj) || ASC.equals(compositor.get(obj))) {                      query.addSortField(obj.toString(), SolrQuery.ORDER.asc);                  } else {                      query.addSortField(obj.toString(), SolrQuery.ORDER.desc);                  }              }          }          if(null != pageSize && 0 < pageSize) {              query.setRows(pageSize);          }          QueryResponse qr = server.query(query);          SolrDocumentList docList = qr.getResults();          return docList;      }            public static Map<String, String> getQueryProperty(Object obj) throws Exception {          Map<String, String> result = new TreeMap<String, String>();          // 获取实体类的所有属性,返回Fields数组          Field[] fields = obj.getClass().getDeclaredFields();          for(Field f : fields) {              String name = f.getName();// 获取属性的名字              String type = f.getGenericType().toString();              if("class java.lang.String".equals(type)) {// 如果type是类类型,则前面包含"class ",后面跟类名                  Method me = obj.getClass().getMethod("get" + UpperCaseField(name));                  String tem = (String) me.invoke(obj);                  if(null != tem) {                      result.put(name, tem);                  }              }          }          return result;      }            public static List<Object> querySolrResult(Object propertyObj, Object compositorObj, Integer pageSize) throws Exception {          Map<String, String> propertyMap = new TreeMap<String, String>();          Map<String, String> compositorMap = new TreeMap<String, String>();          propertyMap = getQueryProperty(propertyObj);          compositorMap = getQueryProperty(compositorObj);          SolrDocumentList docList = query(propertyMap, compositorMap, pageSize);          List<Object> list = new ArrayList<Object>();          for(Object obj : docList) {              list.add(obj);          }          return list;      }            private static String UpperCaseField(String name) {          return name.replaceFirst(name.substring(0, 1), name.substring(0, 1).toUpperCase());      }        public CommonsHttpSolrServer getServer() {          return server;      }        public void setServer(CommonsHttpSolrServer server) {          this.server = server;      }    }  

1 0