`

利用Solr搭建你的搜索引擎

阅读更多
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搭建一个企业搜索平台,包括所需环境、配置步骤以及中文分词的设置。 一、SOLR搭建企业搜索平台 1. **运行环境** - **运行容器**:Tomcat 6.0.20 - **Solr版本**:apache-solr-1.4.0 ...

    利用开源工具搭建小型搜索引擎

    基于开源搜索引擎工具(如Heritrix +Lucence,或Nutch+Solr),搭建独立完整的搜索引擎测试平台。 2)垂直搜索行业信息:自主选择某一感兴趣行业,抓取相关行业内容。以抓取结果作为数据库,建立垂直搜索引擎,实现...

    solr搜索引擎的使用介绍

    Solr搜索引擎的使用介绍 Solr,全称为Apache Solr,是Apache软件基金会的一个开源项目,基于Java开发,是一款...通过理解其核心概念、特性以及应用场景,我们可以充分利用Solr来提升系统的搜索性能,优化用户体验。

    人工智能-项目实践-搜索引擎-基于solrj开发solr主从搜索引擎服务的dubbo组件

    本项目实践聚焦于利用Solrj开发一个支持主从复制的Solr搜索引擎服务,并通过Dubbo组件实现服务的分布式部署与调用。以下将详细阐述这个项目的重点内容和关键技术。 首先,Solr是Apache软件基金会的一个开源项目,它...

    solr集群搭建

    Apache Solr是一款基于Lucene的开源全文搜索引擎,它提供了分布式搜索、近实时处理、多字段排序等功能。以下是对Solr集群搭建的详细步骤和关键知识点的解释。 1. **系统需求**:首先,确保你的系统满足Solr的硬件和...

    积分商城基于Solr的搜索引擎优化

    Solr是一个基于Lucene的开源搜索引擎,它提供了一个企业级的搜索服务器,可以用来执行全文搜索、结构化搜索等多种功能。在电子商务网站中,搜索引擎扮演着至关重要的角色,因为它直接影响着用户体验和网站的运营效率...

    使用lucenesolr搭建Oracle数据库全文搜索服务.docx

    - **Solr**: 是基于Lucene的开源搜索引擎平台,提供了高度可扩展性且具有强大的功能集,支持多种语言。 - **Oracle数据库**: 是一款关系型数据库管理系统,广泛应用于企业级应用中。 #### 二、环境准备 根据文档...

    搭建自己的搜索引擎Java

    综上所述,使用Java搭建搜索引擎涉及到网络爬虫、HTML解析、文本处理、索引构建、查询处理等多个环节。Java生态系统提供了丰富的库和工具,使得开发者能够高效地完成这一任务。结合压缩包中的章节内容,你可以逐步...

    Solr搜索引擎部署应用.docx

    Solr搜索引擎是一款基于...通过本文档提供的步骤,用户可以成功地在Windows环境下搭建Solr搜索引擎,并实现数据的高效管理和检索。在实际应用中,根据具体需求,还可以进一步优化Solr配置,提升系统的性能和稳定性。

    搜索引擎选择: Elasticsearch与Solr - 叽歪.pdf

    在搜索引擎领域,Elasticsearch与Solr是两款被广泛使用且具有代表性的开源全文搜索引擎。它们都基于Apache Lucene构建,提供了强大的搜索引擎功能。在进行搜索引擎选择时,对比Elasticsearch与Solr可以帮助我们更好...

    solr的搭建入门

    Solr搭建入门详解 ...随着对Solr理解的深入,你可以利用其丰富的功能和强大的性能优化能力,构建出高效、可扩展的搜索引擎。在实践中,不断探索和学习Solr的各种特性和最佳实践,将有助于你更好地满足业务需求。

    solr资料以及问题汇总

    "教你使用solr搭建你的全文检索.mht"文件是一个教程,指导用户如何从零开始搭建Solr全文检索系统。全 文检索是Solr的主要功能,包括字段匹配、模糊搜索、高亮显示等,搭建过程涉及Solr的安装、配置、数据导入和搜索...

    solr搜索入门文档 原理-搭建-使用细节

    Solr是基于Apache Lucene的开源全文搜索引擎,它提供了分布式、可扩展且高度可配置的搜索和分析平台。本文将围绕“solr搜索入门文档”的主题,...不断学习和实践,你将能够利用Solr构建出满足各种业务需求的搜索系统。

Global site tag (gtag.js) - Google Analytics