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
- Solr之——Demo实现
- Solr学习之—:solr facet
- Solr之——基础教程
- Android框架之路——聊天Demo实现
- 【solr】——全文检索实现原理
- 【solr】——查询的实现
- solr入门之搜索建议配置和代码Demo
- solr入门之拼写纠错深入研究及代码Demo
- Solr之——整合Tomcat
- 3.搜索之路——solr
- Solr--增删改Demo
- Solr 学习(7) —- Solr Facet(实现搜索推荐词条)
- 搜索引擎之---Apache solr的实现
- Solr4.7源码分析-启动篇之Solr Cloud(二)——solr选举机制
- 用solr操作solr——2
- Solr IV——Solr查询
- Solr(一)——初识Solr
- Solr(三)——solr集群SolrCloud
- 数据仓库的理论与基础-笔记
- Kmean算法
- 将数据库数据转换为xml格式
- cordova源码简析
- 服务端构架干货:快节奏多人游戏的技术实现
- Solr之——Demo实现
- PHP采集利器snoopy应用详解
- 选择默认程序--添加无效--强制更改,ps为例
- Hadoop配置修改 ubuntu版
- error LNK1104 无法打开文件opencv_core245d.lib 解决思路
- 《Qt Creator快速入门》(第二版,霍亚飞)自学笔记 2.2.3设置应用程序图标
- MySQL 序列使用AUTO_INCREMENT
- CListCtrl控件使用方法总结
- 适合IOS新手的pickerView使用