sm702 发表于 2017-12-19 18:07:27

在ssh中利用Solr服务建立的界面化站内搜索

1 String searchWord=request.getParameter("searchText");  2 List<BlogsDO> blogList=new ArrayList<BlogsDO>();
  3 BlogsDO blogsDO=null;
  4 HttpSolrServer solrServer= SolrServer.getInstance().getServer();
  5 SolrQuery sQuery = new SolrQuery();
  6 String para="";
  7 Page page=null;
  8 para="content:"+searchWord+"";
  9
  
10 logger.info("para:"+para);
  
11 sQuery.setQuery(para);
  
12 sQuery.setStart(0);
  
13 sQuery.setRows(10);
  
14 //设置高亮
  
15 sQuery.setHighlight(true); // 开启高亮组件
  
16 sQuery.addHighlightField("content");// 高亮字段
  
17 sQuery.addHighlightField("title");// 高亮字段
  
18 sQuery.setHighlightSimplePre("<font color='red'>");//标记,高亮关键字前缀
  
19 sQuery.setHighlightSimplePost("</font>");//后缀
  
20 sQuery.setHighlightSnippets(2);//结果分片数,默认为1
  
21 sQuery.setHighlightFragsize(1000);//每个分片的最大长度,默认为100
  
22
  
23 //分片信息
  
24 sQuery.setFacet(true)
  
25 .setFacetMinCount(1)
  
26 .setFacetLimit(5)//段
  
27 .addFacetField("content");//分片字段
  
28
  
29 long startSearch=System.currentTimeMillis();
  
30 Integer counts=0;
  
31 try {
  
32   QueryResponse response = solrServer.query(sQuery);
  
33   SolrDocumentList list = response.getResults();
  
34   counts=(int) list.getNumFound();//搜索数量
  
35   logger.info("counts:"+counts);
  
36   //获取所有高亮的字段
  
37   Map<String,Map<String,List<String>>> highlightMap=response.getHighlighting();
  
38   String blogId="";
  
39   for (SolrDocument solrDocument : list) {
  
40   blogsDO=new BlogsDO();
  
41   blogId=(String) solrDocument.getFieldValue("id").toString();
  
42   blogsDO.setId(blogId);
  
43   blogsDO.set_version_(solrDocument.getFieldValue("_version_").toString());
  
44   blogsDO.setUrl(solrDocument.getFieldValue("url").toString());
  
45

  
46   List<String>>  
47   List<String> contentList=highlightMap.get(blogId).get("content");

  
48   if(titleList!=null &&>  
49         blogsDO.setTitle(titleList.get(0));
  
50   }else{
  
51   //获取并设置高亮的字段title
  
52   blogsDO.setTitle(solrDocument.getFieldValue("title").toString());
  
53   }
  
54   if(contentList!=null && contentList.size()>0){
  
55         blogsDO.setContent(contentList.get(0));
  
56      }else{
  
57   //获取并设置高亮的字段content
  
58         blogsDO.setContent(solrDocument.getFieldValue("content").toString());
  
59   }
  
60   blogList.add(blogsDO);
  
61   }
  
62 } catch (SolrServerException e) {
  
63   e.printStackTrace();
  
64 }
  
65 long endSearch=System.currentTimeMillis();
  
66 model.addObject("time", (double)(endSearch-startSearch)/1000);
  
67 model.addObject("counts", counts);
  
68 model.addObject("blogList", blogList);
页: [1]
查看完整版本: 在ssh中利用Solr服务建立的界面化站内搜索