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



public class SolrServer {
private static SolrServer solrServer = null;
private static HttpSolrServer server=null;
private static String url="http://solrIP:8080/solr";
public static synchronized SolrServer getInstance() {
if (solrServer==null){
solrServer=new SolrServer();
}
return solrServer;
}
public static HttpSolrServer getServer(){
try {
if(server==null){
server = new HttpSolrServer(url);
server.setSoTimeout(1000); // socket read timeout
server.setConnectionTimeout(1000);
server.setDefaultMaxConnectionsPerHost(100);
server.setMaxTotalConnections(100);
server.setFollowRedirects(false); // defaults to false
//allowCompression defaults to false.
//Server side must support gzip or deflate for this to have any effect.
server.setAllowCompression(true);
server.setMaxRetries(1); // defaults to 0. > 1 not recommended.
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return server;
}
}
@Entity
@Table(name="blogs")
public class BlogsDO implements Serializable{
private static final long serialVersionUID = -4721368786493126226L;
@Field("Id")
private String id;
@Field("content")
private String content;
@Field("title")
private String title;
@Field("url")
private String url;
@Field("_version_")
private String _version_;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String get_version_() {
return _version_;
}
public void set_version_(String version) {
_version_ = version;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
}
<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"/>
String searchWord=request.getParameter("searchText");
List<BlogsDO> blogList=new ArrayList<BlogsDO>();
BlogsDO blogsDO=null;
HttpSolrServer solrServer= SolrServer.getInstance().getServer();
SolrQuery sQuery = new SolrQuery();
String para="";
Page page=null;
para="content:"+searchWord+"";
logger.info("para:"+para);
sQuery.setQuery(para);
sQuery.setStart(0);
sQuery.setRows(10);
//设置高亮
sQuery.setHighlight(true); // 开启高亮组件
sQuery.addHighlightField("content");// 高亮字段
sQuery.addHighlightField("title");// 高亮字段
sQuery.setHighlightSimplePre("<font color='red'>");//标记,高亮关键字前缀
sQuery.setHighlightSimplePost("</font>");//后缀
sQuery.setHighlightSnippets(2);//结果分片数,默认为1
sQuery.setHighlightFragsize(1000);//每个分片的最大长度,默认为100
//分片信息
sQuery.setFacet(true)
.setFacetMinCount(1)
.setFacetLimit(5)//段
.addFacetField("content");//分片字段
long startSearch=System.currentTimeMillis();
Integer counts=0;
try {
QueryResponse response = solrServer.query(sQuery);
SolrDocumentList list = response.getResults();
counts=(int) list.getNumFound();//搜索数量
logger.info("counts:"+counts);
//获取所有高亮的字段
Map<String,Map<String,List<String>>> highlightMap=response.getHighlighting();
String blogId="";
for (SolrDocument solrDocument : list) {
blogsDO=new BlogsDO();
blogId=(String) solrDocument.getFieldValue("id").toString();
blogsDO.setId(blogId);
blogsDO.set_version_(solrDocument.getFieldValue("_version_").toString());
blogsDO.setUrl(solrDocument.getFieldValue("url").toString());
List<String> titleList=highlightMap.get(blogId).get("title");
List<String> contentList=highlightMap.get(blogId).get("content");
if(titleList!=null && titleList.size()>0){
blogsDO.setTitle(titleList.get(0));
}else{
//获取并设置高亮的字段title
blogsDO.setTitle(solrDocument.getFieldValue("title").toString());
}
if(contentList!=null && contentList.size()>0){
blogsDO.setContent(contentList.get(0));
}else{
//获取并设置高亮的字段content
blogsDO.setContent(solrDocument.getFieldValue("content").toString());
}
blogList.add(blogsDO);
}
} catch (SolrServerException e) {
e.printStackTrace();
}
long endSearch=System.currentTimeMillis();
model.addObject("time", (double)(endSearch-startSearch)/1000);
model.addObject("counts", counts);
model.addObject("blogList", blogList);

友情赞助
如果你觉得博主的文章对你那么一点小帮助,恰巧你又有想打赏博主的小冲动,那么事不宜迟,赶紧扫一扫,小额地赞助下,攒个奶粉钱,也是让博主有动力继续努力,写出更好的文章^^。
1. 支付宝 2. 微信

在ssh中利用Solr服务建立的界面化站内搜索---solr2的更多相关文章
- 在ssh中利用Solr服务建立的界面化站内搜索
继上次匆匆搭建起结合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? 问题提出:当我们访问购物网站的时候,我们可以根据我们随意所想的内容输入关键字就可以查询出相关的内容,这是怎么做到呢?这些随意的数据 ...
随机推荐
- 视频聊天室可以用php制作吗?
首先,告诉你单纯用php制作视频聊天室是实现不了的,需要配合其他技术手段一起操作,例如和FLASH配合,使用FLASH获取语音(FLASH可以获取访问端的设备,例如摄像头). PHP运行在服务器端,是 ...
- java jps 命令详解
JPS 名称: jps - Java Virtual Machine Process Status Tool 命令用法: jps [options] [hostid] options:命令选项,用来对 ...
- javascript定时函数
setTimeout(表达式,延迟时间)是定时程序,也就是在什么时间以后干什么,只做一次,就不做了.表达式为字符串函数或其它表达式,时间单位为毫秒 例子:setTimeout("f()&qu ...
- MyEclipse中如何安装插件(以Subclipse为例)[转]
一.到官方上下载svn1.8.3,下载后的文件名叫site-1.8.3.zip 地址:http://subclipse.tigris.org/servlets/ProjectDocumentList? ...
- 解剖SQLSERVER 第二篇 对数据页面头进行逆向(译)
解剖SQLSERVER 第二篇 对数据页面头进行逆向(译) http://improve.dk/reverse-engineering-sql-server-page-headers/ 在开发Orc ...
- TCP字节流和UDP数据报区别
两者的区别在于TCP接收的是一堆数据,而每次取多少由主机决定;而UDP发的是数据报,客户发送多少就接收多少. 拥有这些区别的原因是由于TCP和UDP的特性不同而决定的.TCP是面向连接的,也就是说,在 ...
- Java虚拟机5:Java垃圾回收(GC)机制详解
哪些内存需要回收? 哪些内存需要回收是垃圾回收机制第一个要考虑的问题,所谓“要回收的垃圾”无非就是那些不可能再被任何途径使用的对象.那么如何找到这些对象? 1.引用计数法 这个算法的实现是,给对象中添 ...
- 那些年使用Hive踩过的坑
1.概述 这个标题也是用血的教训换来的,希望对刚进入hive圈的童鞋和正在hive圈爬坑的童鞋有所帮助.打算分以下几个部分去描述: Hive的结构 Hive的基本操作 Hive Select Hive ...
- Programming Entity Framework CodeFirst -- 约定和属性配置
以下是EF中Data Annotation和 Fluenlt API的不同属性约定的对照. Length Data Annotation MinLength(nn) MaxLength(nn) ...
- 使用后缀数组寻找最长公共子字符串JavaScript版
后缀数组很久很久以前就出现了,具体的概念读者自行搜索,小菜仅略知一二,不便讨论. 本文通过寻找两个字符串的最长公共子字符串,演示了后缀数组的经典应用. 首先需要说明,小菜实现的这个后缀数组算法,并非标 ...