文档章节

Solr之——Demo实现

庞陆阳
 庞陆阳
发布于 2018/08/21 15:09
字数 713
阅读 112
收藏 0
 
  1. package com.cpf.service;

  2.  
  3. import java.io.IOException;

  4. import java.net.MalformedURLException;

  5. import java.util.ArrayList;

  6. import java.util.Iterator;

  7. import java.util.List;

  8. import java.util.Map;

  9.  
  10. import javax.faces.FactoryFinder;

  11.  
  12. import org.apache.lucene.document.Document;

  13. import org.apache.solr.client.solrj.SolrQuery;

  14. import org.apache.solr.client.solrj.SolrServer;

  15. import org.apache.solr.client.solrj.SolrServerException;

  16. import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;

  17. import org.apache.solr.client.solrj.response.FacetField;

  18. import org.apache.solr.client.solrj.response.QueryResponse;

  19. import org.apache.solr.common.SolrDocument;

  20. import org.apache.solr.common.SolrDocumentList;

  21. import org.apache.solr.common.SolrInputDocument;

  22.  
  23. import com.cpf.model.Good;

  24.  
  25.  
  26. public class SolrService {

  27. private static SolrServer solrServer;

  28. public SolrService(String solrUrl){

  29. try {

  30. solrServer= new CommonsHttpSolrServer(solrUrl);

  31. } catch (MalformedURLException e) {

  32. e.printStackTrace();

  33. }

  34. }

  35.  
  36. public void createIndexs(List<Good> list){

  37. List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();

  38. for(Good good :list){

  39. SolrInputDocument doc= new SolrInputDocument();

  40. doc.addField("id", good.getGood_id());

  41. doc.addField("merchant_id", good.getGood_id());

  42. doc.addField("region_id", good.getRegion_id());

  43. doc.addField("good_name", good.getGood_name());

  44. doc.addField("good_no", good.getGood_no());

  45. doc.addField("barcode", good.getBarcode());

  46. doc.addField("good_desc", good.getGood_desc());

  47. doc.addField("price", good.getPrice());

  48. doc.addField("num", good.getNum());

  49. doc.addField("typeId", good.getTypeId());

  50. doc.addField("typeName", good.getTypeName());

  51. docs.add(doc);

  52. }

  53. try {

  54. solrServer.add(docs);

  55. solrServer.optimize();

  56. solrServer.commit();

  57. } catch (Exception e) {

  58.  
  59. e.printStackTrace();

  60. }

  61.  
  62. }

  63. public List<Good> search(String key){

  64. List<Good> goodList= new ArrayList<Good>();

  65. SolrQuery query= new SolrQuery();

  66. query.setQuery("good_desc:"+key);

  67. query.setRows(20);

  68. query.setHighlight(true);

  69. // 设置高亮区域

  70. query.addHighlightField("good_desc");

  71. // 设置高亮区域前缀

  72. query.setHighlightSimplePre("<font color=\"red\">");

  73. // 设置高亮区域后缀

  74. query.setHighlightSimplePost("</font>");

  75. // query.setFacet(true);

  76. QueryResponse rsp = null;

  77. try {

  78. rsp = solrServer.query(query);

  79.  
  80. } catch (SolrServerException e) {

  81. e.printStackTrace();

  82. }

  83. SolrDocumentList documentList=rsp.getResults();

  84. @SuppressWarnings("unused")

  85. Map<String, Map<String,List<String>>> map=rsp.getHighlighting();

  86.  
  87. Iterator<SolrDocument> list=documentList.iterator();

  88.  
  89. while(list.hasNext()){

  90. SolrDocument doucment=list.next();

  91. Good good= new Good();

  92. String goodId=String.valueOf(doucment.get("id"));

  93. String goodName=(String) doucment.get("good_name");

  94. String goodDesc=(String) doucment.get("good_desc");

  95. if(map.get(goodId)!=null && map.get(goodId).size()>0){

  96. if(map.get(goodId).get("good_desc")!=null){

  97. goodDesc=map.get(goodId).get("good_desc").get(0);

  98. }

  99. }

  100. good.setGood_id(Integer.parseInt(goodId));

  101. good.setGood_name(goodName);

  102. good.setGood_desc(goodDesc);

  103. goodList.add(good);

  104. }

  105.  
  106. return goodList;

  107. }

  108. public void delIndex(){

  109. try {

  110. solrServer.deleteByQuery("*:*");

  111. solrServer.commit();//要记得提交数据

  112. } catch (Exception e) {

  113. e.printStackTrace();

  114. }

  115. }

  116. public static SolrServer getSolrServer() {

  117. return solrServer;

  118. }

  119. public static void setSolrServer(SolrServer solrServer) {

  120. SolrService.solrServer = solrServer;

  121. }

  122.  
  123. }

 
  1. import java.lang.reflect.Field;

  2. import java.lang.reflect.Method;

  3. import java.net.MalformedURLException;

  4. import java.util.ArrayList;

  5. import java.util.List;

  6. import java.util.Map;

  7. import java.util.TreeMap;

  8.  
  9. import org.apache.solr.client.solrj.SolrQuery;

  10. import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;

  11. import org.apache.solr.client.solrj.response.QueryResponse;

  12. import org.apache.solr.common.SolrDocumentList;

  13.  
  14. public class SolrHttpServer {

  15. //private Logger logger = LoggerFactory.getLogger(this.getClass());

  16. private final static String URL = "http://localhost:8080/solr";

  17. private final static Integer SOCKE_TTIMEOUT = 1000; // socket read timeout

  18. private final static Integer CONN_TIMEOUT = 100;

  19. private final static Integer MAXCONN_DEFAULT = 100;

  20. private final static Integer MAXCONN_TOTAL = 100;

  21. private final static Integer MAXRETRIES = 1;

  22. private static CommonsHttpSolrServer server = null;

  23. private final static String ASC = "asc";

  24.  
  25. public void init() throws MalformedURLException {

  26. server = new CommonsHttpSolrServer( URL );

  27. //server.setParser(new XMLResponseParser());

  28. server.setSoTimeout(SOCKE_TTIMEOUT);

  29. server.setConnectionTimeout(CONN_TIMEOUT);

  30. server.setDefaultMaxConnectionsPerHost(MAXCONN_DEFAULT);

  31. server.setMaxTotalConnections(MAXCONN_TOTAL);

  32. server.setFollowRedirects(false);

  33. server.setAllowCompression(true);

  34. server.setMaxRetries(MAXRETRIES);

  35. }

  36.  
  37. public static SolrDocumentList query(Map<String, String> property, Map<String, String> compositor, Integer pageSize) throws Exception {

  38. SolrQuery query = new SolrQuery();

  39. // 设置搜索字段

  40. if(null == property) {

  41. throw new Exception("搜索字段不可为空!");

  42. } else {

  43. for(Object obj : property.keySet()) {

  44. StringBuffer sb = new StringBuffer();

  45. sb.append(obj.toString()).append(":");

  46. sb.append(property.get(obj));

  47. String sql = (sb.toString()).replace("AND", " AND ").replace("OR", " OR ").replace("NOT", " NOT ");

  48. query.setQuery(sql);

  49. }

  50. }

  51. // 设置结果排序

  52. if(null != compositor) {

  53. for(Object obj : compositor.keySet()) {

  54. if(ASC == compositor.get(obj) || ASC.equals(compositor.get(obj))) {

  55. query.addSortField(obj.toString(), SolrQuery.ORDER.asc);

  56. } else {

  57. query.addSortField(obj.toString(), SolrQuery.ORDER.desc);

  58. }

  59. }

  60. }

  61. if(null != pageSize && 0 < pageSize) {

  62. query.setRows(pageSize);

  63. }

  64. QueryResponse qr = server.query(query);

  65. SolrDocumentList docList = qr.getResults();

  66. return docList;

  67. }

  68.  
  69. public static Map<String, String> getQueryProperty(Object obj) throws Exception {

  70. Map<String, String> result = new TreeMap<String, String>();

  71. // 获取实体类的所有属性,返回Fields数组

  72. Field[] fields = obj.getClass().getDeclaredFields();

  73. for(Field f : fields) {

  74. String name = f.getName();// 获取属性的名字

  75. String type = f.getGenericType().toString();

  76. if("class java.lang.String".equals(type)) {// 如果type是类类型,则前面包含"class ",后面跟类名

  77. Method me = obj.getClass().getMethod("get" + UpperCaseField(name));

  78. String tem = (String) me.invoke(obj);

  79. if(null != tem) {

  80. result.put(name, tem);

  81. }

  82. }

  83. }

  84. return result;

  85. }

  86.  
  87. public static List<Object> querySolrResult(Object propertyObj, Object compositorObj, Integer pageSize) throws Exception {

  88. Map<String, String> propertyMap = new TreeMap<String, String>();

  89. Map<String, String> compositorMap = new TreeMap<String, String>();

  90. propertyMap = getQueryProperty(propertyObj);

  91. compositorMap = getQueryProperty(compositorObj);

  92. SolrDocumentList docList = query(propertyMap, compositorMap, pageSize);

  93. List<Object> list = new ArrayList<Object>();

  94. for(Object obj : docList) {

  95. list.add(obj);

  96. }

  97. return list;

  98. }

  99.  
  100. private static String UpperCaseField(String name) {

  101. return name.replaceFirst(name.substring(0, 1), name.substring(0, 1).toUpperCase());

  102. }

  103.  
  104. public CommonsHttpSolrServer getServer() {

  105. return server;

  106. }

  107.  
  108. public void setServer(CommonsHttpSolrServer server) {

  109. this.server = server;

  110. }

  111.  
  112. }

 

本文转载自:http://blog.csdn.net/l1028386804/article/details/50456063

庞陆阳
粉丝 14
博文 109
码字总数 46463
作品 0
嘉定
后端工程师
私信 提问
solr搜索之demo和集成IKAnalyzer(二)

1 新建demo-solr 关闭运行的solr应用。 进入solr目录:D:solr-4.10.2example 1、在example目录下创建demo-solr文件夹; 2、将./solr下的solr.xml拷贝到demo-solr目录下; 3、在demo-solr下创...

技术小阿哥
2017/11/27
0
0
中小型研发团队架构实践:搜索服务器Solr

一、Solr 是什么 Apache Solr 是一个开源的搜索服务器,Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。 Apache Lucene 是一个高效的、基于 Java 的全文检索库。 二、为什么...

张辉清
2017/12/18
0
0
Apache Solr:基于Lucene的可扩展集群搜索服务器

Solr Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出...

长平狐
2013/01/06
285
0
海量数据搜索---demo展示百度、谷歌搜索引擎的实现

在我们平常的生活工作中,百度、谷歌这些搜索网站已经成为了我们受教解惑的学校,俗话说得好,“有问题找度娘”。那么百度是如何在海量数据中找到自己需要的数据呢?为什么它搜索的速度如此之...

宜信技术学院
09/05
2.4K
0
云HBase发布全文索引服务,轻松应对复杂查询

云HBase发布了“全文索引服务”功能,自2019年01月25日后创建的云HBase实例,可以在控制台免费开启此“全文索引服务”功能。使用此功能可以让用户在HBase之上构建功能更丰富的搜索业务,不再...

阿里云云栖社区
02/19
17
0

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins admin 密码忘记解决

一、admin密码未更改情况 1.进入\Jenkins\secrets目录,打开initialAdminPassword文件,复制密码; find / -name initialAdminPassword [root@jenkins jenkins]# cat /var/lib/jenkins/secre......

SuShine
29分钟前
5
0
LiveData原理分析

LiveData原理分析 1 LiveData简介 大部分Android应用会从网络或SQLite数据库存取数据,并根据数据更新界面。为了避免ANR,主线程中不能存取数据。而后台线程中无法更新界面。通常的做法是让后...

tommwq
42分钟前
4
0
Java描述设计模式(20):命令模式

本文源码:GitHub·点这里 || GitEE·点这里 一、生活场景 1、场景描述 智能电脑的品牌越来越多,由此诞生了一款电脑控制的APP,万能遥控器,用户在使用遥控器的时候,可以切换为自家电视的品...

知了一笑
43分钟前
3
0
java---网络编程(上)

1.1网络编程 网络编程指的是编写运行在多个设备计算机的程序,这些计算机通过网络连接起来 java.net包中提供了两种常见的网络协议的支持: TCP:TCP是传输控制层协议的缩写,它保障了两个应用...

Firefly-
47分钟前
15
0
城市搜索插件 city-query

  今天,给大家介绍一个比较简单有用的插件city-query,大家可以从coding上面下载下来。 git clone https://gitee.com/jflsy/city-query.git   引用插件时只需要src文件下的内容就可以了...

芳缘
52分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部