1, 下载solr 3.0/4.0,本文以3.0为例(参考附件的说明)
2, 创建一个抽象的SolrEntity,在solr的schema文件中,定义这几个字段
public abstract class SolrEntity implements Serializable {
@Field("id")
protected String solrjId;
@Field("entity_author")
protected String entityAuthor;
@Field("entity_content")
protected String entityContent;
@Field("entity_timestamp")
protected String entityTimeStamp;
//All the Pojo must override this method to generate the index
public abstract void generateSolrIndex();
public static SolrEntity generateSolrEntity(SolrDocument document) {
SolrEntity entity = new SolrEntity() {
@Override
public void generateSolrIndex() {
}
};
entity.setSolrjId(String.valueOf(document.getFieldValue("id")));
entity.setEntityAuthor(String.valueOf(document.getFieldValue("entity_author")));
entity.setEntityContent(String.valueOf(document.getFieldValue("entity_content")));
entity.setEntityTimeStamp(String.valueOf(document.getFieldValue("entity_timestamp")));
return entity;
}
public void highlight(String keywords) {
//TODO:here we can make the search string high light
}
public String getSolrjId() {
return solrjId;
}
public void setSolrjId(String solrjId) {
this.solrjId = solrjId;
}
public String getEntityContent() {
return entityContent;
}
public void setEntityContent(String entityContent) {
this.entityContent = entityContent;
}
public String getEntityAuthor() {
return entityAuthor;
}
public void setEntityAuthor(String entityAuthor) {
this.entityAuthor = entityAuthor;
}
public String getEntityTimeStamp() {
return entityTimeStamp;
}
public void setEntityTimeStamp(String entityTimeStamp) {
this.entityTimeStamp = entityTimeStamp;
}
}
3, 集成这个SolrEntity的需要实现下面的这个方法
public void generateSolrIndex() {
this.solrjId = this.getClass().getSimpleName() + ":" + id;
this.entityAuthor = getCreatorName();
this.entityContent = getContext();
this.entityTimeStamp = DateUtil.formatDateToString(getCreateTime());
}
4, 创建SolrService和SolrServiceImpl
public interface SolrService {
//最好通过事件来通知更新索引
void index(SolrEntity entity);
void delete(SolrEntity entity);
int queryForNumber(String searchCondition) throws Exception;
List<SolrEntity> queryForResult(String searchCondition, int start) throws Exception;
}
ublic class SolrServiceImpl implements SolrService {
public void index(SolrEntity entity) {
try {
SolrServerService solrServerService = new SolrServerService();
CommonsHttpSolrServer solrServer = solrServerService.getServer();
entity.generateSolrIndex();
solrServer.addBean(entity);
solrServer.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
public void delete(SolrEntity entity) {
try {
SolrServerService solrServerService = new SolrServerService();
CommonsHttpSolrServer solrServer = solrServerService.getServer();
entity.generateSolrIndex();
solrServer.deleteByQuery("id:" + entity.getSolrjId());
solrServer.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
public int queryForNumber(String searchCondition) throws Exception {
SolrServerService solrServerService = new SolrServerService();
CommonsHttpSolrServer solrServer = solrServerService.getServer();
SolrQuery query = new SolrQuery();
query.setFields("id");
query.setRows(10000);
query.setQuery(searchCondition);
QueryResponse response = solrServer.query(query);
return response.getResults().size();
}
public List<SolrEntity> queryForResult(String searchCondition, int start) throws Exception {
List<SolrEntity> entities = new ArrayList<SolrEntity>();
SolrServerService solrServerService = new SolrServerService();
CommonsHttpSolrServer solrServer = solrServerService.getServer();
SolrQuery query = new SolrQuery();
query.setRows(PagingUtil.DEFAULT_OVERVIEW_MAX_ITEMS);
query.setStart(start);
query.setQuery(searchCondition);
QueryResponse response = solrServer.query(query);
SolrDocumentList solrDocumentList = response.getResults();
for (SolrDocument document : solrDocumentList.subList(0, solrDocumentList.size())) {
SolrEntity entity = SolrEntity.generateSolrEntity(document);
entities.add(entity);
}
return entities;
//这个就是你得到的结果
}
}
5, 上面用到的SolrServerService可以通过很多种方式来获取(bean factory, pojo)
public class SolrServerService {
private static CommonsHttpSolrServer server;
public CommonsHttpSolrServer getServer() {
if (server == null) {
try {
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("Solr.properties");
Properties p = new Properties();
try {
p.load(inputStream);
} catch (IOException e1) {
e1.printStackTrace();
}
String serverUrl = p.getProperty("solr.serverUrl");
String connectionTimeout = p.getProperty("solr.connectionTimeout");
String defaultMaxConnectionsPerHost = p.getProperty("solr.connectionTimeout");
String maxTotalConnections = p.getProperty("solr.maxTotalConnections");
String followRedirects = p.getProperty("solr.followRedirects");
String allowCompression = p.getProperty("solr.allowCompression");
String maxRetries = p.getProperty("solr.maxRetries");
server = new CommonsHttpSolrServer(serverUrl);
server.setConnectionTimeout(Integer.valueOf(connectionTimeout));
server.setDefaultMaxConnectionsPerHost(Integer.valueOf(defaultMaxConnectionsPerHost));
server.setMaxTotalConnections(Integer.valueOf(maxTotalConnections));
server.setFollowRedirects(Boolean.valueOf(followRedirects));
server.setAllowCompression(Boolean.valueOf(allowCompression));
server.setMaxRetries(Integer.valueOf(maxRetries));
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("solr init error");
}
}
return server;
}
}
分享到:
相关推荐
本文将详细阐述如何利用SOLR搭建一个企业搜索平台,包括所需环境、配置步骤以及中文分词的设置。 一、SOLR搭建企业搜索平台 1. **运行环境** - **运行容器**:Tomcat 6.0.20 - **Solr版本**:apache-solr-1.4.0 ...
基于开源搜索引擎工具(如Heritrix +Lucence,或Nutch+Solr),搭建独立完整的搜索引擎测试平台。 2)垂直搜索行业信息:自主选择某一感兴趣行业,抓取相关行业内容。以抓取结果作为数据库,建立垂直搜索引擎,实现...
Solr搜索引擎的使用介绍 Solr,全称为Apache Solr,是Apache软件基金会的一个开源项目,基于Java开发,是一款...通过理解其核心概念、特性以及应用场景,我们可以充分利用Solr来提升系统的搜索性能,优化用户体验。
本项目实践聚焦于利用Solrj开发一个支持主从复制的Solr搜索引擎服务,并通过Dubbo组件实现服务的分布式部署与调用。以下将详细阐述这个项目的重点内容和关键技术。 首先,Solr是Apache软件基金会的一个开源项目,它...
Apache Solr是一款基于Lucene的开源全文搜索引擎,它提供了分布式搜索、近实时处理、多字段排序等功能。以下是对Solr集群搭建的详细步骤和关键知识点的解释。 1. **系统需求**:首先,确保你的系统满足Solr的硬件和...
Solr是一个基于Lucene的开源搜索引擎,它提供了一个企业级的搜索服务器,可以用来执行全文搜索、结构化搜索等多种功能。在电子商务网站中,搜索引擎扮演着至关重要的角色,因为它直接影响着用户体验和网站的运营效率...
- **Solr**: 是基于Lucene的开源搜索引擎平台,提供了高度可扩展性且具有强大的功能集,支持多种语言。 - **Oracle数据库**: 是一款关系型数据库管理系统,广泛应用于企业级应用中。 #### 二、环境准备 根据文档...
综上所述,使用Java搭建搜索引擎涉及到网络爬虫、HTML解析、文本处理、索引构建、查询处理等多个环节。Java生态系统提供了丰富的库和工具,使得开发者能够高效地完成这一任务。结合压缩包中的章节内容,你可以逐步...
Solr搜索引擎是一款基于...通过本文档提供的步骤,用户可以成功地在Windows环境下搭建Solr搜索引擎,并实现数据的高效管理和检索。在实际应用中,根据具体需求,还可以进一步优化Solr配置,提升系统的性能和稳定性。
在搜索引擎领域,Elasticsearch与Solr是两款被广泛使用且具有代表性的开源全文搜索引擎。它们都基于Apache Lucene构建,提供了强大的搜索引擎功能。在进行搜索引擎选择时,对比Elasticsearch与Solr可以帮助我们更好...
Solr搭建入门详解 ...随着对Solr理解的深入,你可以利用其丰富的功能和强大的性能优化能力,构建出高效、可扩展的搜索引擎。在实践中,不断探索和学习Solr的各种特性和最佳实践,将有助于你更好地满足业务需求。
"教你使用solr搭建你的全文检索.mht"文件是一个教程,指导用户如何从零开始搭建Solr全文检索系统。全 文检索是Solr的主要功能,包括字段匹配、模糊搜索、高亮显示等,搭建过程涉及Solr的安装、配置、数据导入和搜索...
Solr是基于Apache Lucene的开源全文搜索引擎,它提供了分布式、可扩展且高度可配置的搜索和分析平台。本文将围绕“solr搜索入门文档”的主题,...不断学习和实践,你将能够利用Solr构建出满足各种业务需求的搜索系统。