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




1 public class SolrServer {
2 private static SolrServer solrServer = null;
3 private static HttpSolrServer server=null;
4 private static String url="http://solrIP:8080/solr";
5
6 public static synchronized SolrServer getInstance() {
7 if (solrServer==null){
8 solrServer=new SolrServer();
9 }
10 return solrServer;
11 }
12 public static HttpSolrServer getServer(){
13 try {
14 if(server==null){
15 server = new HttpSolrServer(url);
16 server.setSoTimeout(1000); // socket read timeout
17 server.setConnectionTimeout(1000);
18 server.setDefaultMaxConnectionsPerHost(100);
19 server.setMaxTotalConnections(100);
20 server.setFollowRedirects(false); // defaults to false
21 //allowCompression defaults to false.
22 //Server side must support gzip or deflate for this to have any effect.
23 server.setAllowCompression(true);
24 server.setMaxRetries(1); // defaults to 0. > 1 not recommended.
25 }
26 } catch (Exception e) {
27 // TODO Auto-generated catch block
28 e.printStackTrace();
29 }
30 return server;
31 }
32 }


1 @Entity
2 @Table(name="blogs")
3 public class BlogsDO implements Serializable{
4 private static final long serialVersionUID = -4721368786493126226L;
5 @Field("Id")
6 private String id;
7 @Field("content")
8 private String content;
9 @Field("title")
10 private String title;
11 @Field("url")
12 private String url;
13 @Field("_version_")
14 private String _version_;
15 public String getId() {
16 return id;
17 }
18 public void setId(String id) {
19 this.id = id;
20 }
21 public String getContent() {
22 return content;
23 }
24 public void setContent(String content) {
25 this.content = content;
26 }
27 public String getTitle() {
28 return title;
29 }
30 public void setTitle(String title) {
31 this.title = title;
32 }
33 public String getUrl() {
34 return url;
35 }
36 public void setUrl(String url) {
37 this.url = url;
38 }
39 public String get_version_() {
40 return _version_;
41 }
42 public void set_version_(String version) {
43 _version_ = version;
44 }
45 public static long getSerialversionuid() {
46 return serialVersionUID;
47 }
48 }

<field name="_version_" type="long" indexed="true" stored="true"/>
<!-- fields for index-basic plugin -->
<field name="url" type="url" stored="true" indexed="true"required="true"/>
<field name="content" type="text" stored="true" indexed="true"/>
<field name="title" type="text" stored="true" indexed="true"/>

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> titleList=highlightMap.get(blogId).get("title");
47 List<String> contentList=highlightMap.get(blogId).get("content");
48 if(titleList!=null && titleList.size()>0){
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. 支付宝 2. 微信

在ssh中利用Solr服务建立的界面化站内搜索的更多相关文章
- 在ssh中利用Solr服务建立的界面化站内搜索---solr2
继上次匆匆搭建起结合solr和nutch的所谓站内搜索引擎之后,虽当时心中兴奋不已,可是看了看百度,再只能看看我的控制台的打印出每个索引项的几行文字,哦,好像差距还是有点大…… ...
- 利用Solr服务建立的站内搜索雏形---solr1
最近看完nutch后总感觉像好好捯饬下solr,上次看到老大给我展现了下站内搜索我便久久不能忘怀.总觉着之前搭建的nutch配上solr还是有点呆板,在nutch爬取的时候就建立索引到solr服务下, ...
- 利用Solr服务建立的站内搜索雏形
最近看完nutch后总感觉像好好捯饬下solr,上次看到老大给我展现了下站内搜索我便久久不能忘怀.总觉着之前搭建的nutch配上solr还是有点呆板,在nutch爬取的时候就建立索引到solr服务下, ...
- JAVAEE——宜立方商城07:Linux上搭建Solr服务、数据库导入索引库、搜索功能的实现
1. 学习计划 1.Solr服务搭建 2.Solrj使用测试 3.把数据库中的数据导入索引库 4.搜索功能的实现 2. Solr服务搭建 2.1. Solr的环境 Solr是java开发. 需要安装j ...
- Django之站内搜索-Solr,Haystack
java -version 不多说 solr 是java 开发的 java version "1.7.0_79" Java(TM) SE Runtime Environment ( ...
- solr服务中集成IKAnalyzer中文分词器、集成dataimportHandler插件
昨天已经在Tomcat容器中成功的部署了solr全文检索引擎系统的服务:今天来分享一下solr服务在海量数据的网站中是如何实现数据的检索. 在solr服务中集成IKAnalyzer中文分词器的步骤: ...
- J2EE进阶(七)利用SSH框架根据数据表建立model类
J2EE进阶(七)利用SSH框架根据数据表建立model类 前言 在利用SSH框架进行项目开发时,若将数据库已经建好,并且数据表之间的依赖关系已经确定,可以利用Hibernate的反转功能进行mode ...
- 【C#】教你纯手工用C#实现SSH协议作为GIT服务端
SSH(Secure Shell)是一种工作在应用层和传输层上的安全协议,能在非安全通道上建立安全通道.提供身份认证.密钥更新.数据校验.通道复用等功能,同时具有良好的可扩展性.本文从SSH的架构开始 ...
- 利用solr实现商品的搜索功能
后期补充: 为什么要用solr服务,为什么要用luncence? 问题提出:当我们访问购物网站的时候,我们可以根据我们随意所想的内容输入关键字就可以查询出相关的内容,这是怎么做到呢?这些随意的数据 ...
随机推荐
- Linux系统下/tmp目录文件重启后自动删除,不重启自动删除10天前的/TMP的文件(转)
/tmp目录文件重启后自动删除现在知道有ubuntu和solaris系统source:http://blog.chinaunix.net/uid-26212859-id-3567875.html经常会 ...
- Java基础-编写问候语-“Hello World”
Java基础-编写问候语-“Hello World” 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编写“Hello World”程序 1>.编写源代码 任何文本编辑起都 ...
- 20155238 2016-2017-2 《Java程序设计》第五周学习总结
教材学习内容总结 Java语言中所有的错误都会包装为对象.使用try.catch可以对对象做处理. 设计错误对象都继承自java.lang.Throwable类.Throwable定义了取得错误信息, ...
- 解决 phpmyadmin #2002 无法登录 MySQL 服务器
将 “phpMyAdmin/libraries”文件夹下的config.default.php文件中的 $cfg['Servers'][$i]['host'] = 'localhost'; 修改为 $ ...
- MongoDB 之 Limit 选取 Skip 跳过 Sort 排序 MongoDB - 7
我们已经学过MongoDB的 find() 查询功能了,在关系型数据库中的选取(limit),排序(sort) MongoDB中同样有,而且使用起来更是简单 首先我们看下添加几条Document进来 ...
- jquery的几种ajax方式对比
jquery的几种ajax方式对比 jquery的ajax方式有如下几种: 1. $.post(url,params,callback); 2. $.getJSON(url,params,ca ...
- Hibernate的实体规则、主键生成策略、对象状态
一. hibernate的实体类有一定的规则,类似于mybatis的逆向工程导出的实体类.具体的规则以及原因如下: 1.持久化类需要提供无参的构造方法. 因为hibernate底层采用反射机制创建对象 ...
- QTP设置共享对象库
第一步:把需要加到共享对象库中的各个用例脚本的对象库,分别导出成.tsr文件. 操作方法:先用QTP打开已经录制完毕的脚本后,选择Resources-->Object Repository.然后 ...
- c#按字符串中的数字排序问题
在.net 的framewrok框架中提供的排序方法中,如string.sort() 或ArrayList.Sort()方法.这两个方法对字符串排序时,如果字符串中含有数字,则不会按数字大小排序.如: ...
- inline-block元素间隙问题原因及解决方法
inline-block元素间隙问题原因及解决方法 原因: 书写时由空格.换行或回车所产生空白符所致 解决方法: 方法1:font-size:0 方法2:改变书写方式 方法3:使用margin负值 方 ...