`
guyunduzai
  • 浏览: 17551 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论
阅读更多

        solr是一款非常强大的搜索项目,虽然基于luncen开发,但是在其基础上做了一定的修改,特别是强大的solr cloud,我是刚开始接触solr,记录下使用solr实现最简单的增删改查。

         首先需要搭建solr的开发环境,网上搭建solr开发环境的资料很多,大家可以去找一下,搭建过程也很简单,这里默认大家环境是完好的,没好的话可以参考我的另外一篇博客。

 

以下操作前提假设:schema.xml中主要的配置为:

<field name="blogId" type="string" required="true" multiValued="false" stored="true" indexed="true"/>
<field name="content" type="textik" multiValued="false" stored="true" indexed="true"/>
<field name="blogUrl" type="string" multiValued="false" stored="true" indexed="false"/>

 

一、创建索引

1、获取solr服务的连接,设计了一个单例模式,最小限度的创建连接数量

private static HttpSolrServer httpSolrServer;
    private static HttpSolrServer getHttpSolrServer() {
        if (httpSolrServer == null) {
	    // solr服务的url,连接响应时间、连接时间,最大连接数、分路由最大连接数,重试次数,是否支持压缩等参数的设置
            httpSolrServer = new HttpSolrServer("127.0.0.1:8983/solr/bolg");
            httpSolrServer.setSoTimeout(1000);
            httpSolrServer.setConnectionTimeout(1000);
            httpSolrServer.setDefaultMaxConnectionsPerHost(50);
            httpSolrServer.setMaxRetries(3);
            httpSolrServer.setMaxTotalConnections(100);
            httpSolrServer.setAllowCompression(true);
            httpSolrServer.setFollowRedirects(false);
        }
        return httpSolrServer;
    }

 2、创建一个实体类的对象,以便于保存索引,与实体类保存到数据库原理相似

public class BlogDTO implements Serializable{
    @Field
    private String blogId;
    @Field
    private String content;
    @Field
    private String blogUrl;
    // 省略get和set方法...
}

 3、创建索引

public boolean createBlogIndex(List<BlogDTO> blogList) {
        // blogList中不能包含null对象,需要做一步处理,省略
        SolrServer solrServer = getHttpSolrServer();
        try {
            if(blogList == null || blogList.size()==0){
                return false;
            }
            // 批量创建博客数据索引数据
            solrServer.addBeans(blogList);
            solrServer.commit();
	    // 优化索引,不建议每次创建好之后都优化,定期优化即可
	    solrServer.optimize();
            return true;
        } catch (Exception e) {
	    // TODO
            LOGGER.logException(eventMessage, e);
        }
        return false;
    }

   创建好索引后可以选择优化,优化索引所做的操作是将索引文件惊醒合并和归类,在此过程中,会影响索引的读操作,不建议每次创建后优化,可以每隔一定时间进行优化,时间根据需要来设定。索引创建结束成功后,就可以通过solr的客户端查询验证数据了。

 

二、查询索引

public List<BlogDTO> queryBlogList(String blogId) {
        List<BlogDTO> queryResult = new ArrayList<BlogDTO>();
        QueryResponse response = null;
        // 主搜索条件
        String searchParam = "blodId:" + blogId;
        // 获取服务连接
        SolrServer server = getHttpSolrServer();
        SolrQuery query = new SolrQuery(searchParam);
	// 添加联合查询条件 相当于and
        query.setFilterQueries("url:www.baidu.com");
	// 此处可以设置要返回的字段,比如只返回博客内容
        query.setFields("content");
        // 搜索排序条件
        query.addSortField("blogId", ORDER.desc);
        query.setRows(2); // 每页文档数,默认为10
        try {
            response = server.query(query);
        } catch (Exception e) {
            LOGGER.logException(e);
        }
        if (response != null) {
            SolrDocumentList list = response.getResults();
            // 将搜索结果封装为结果类
            queryResult = processBlogData(list);
        }
        return queryResult;
    }
    // 将solr中查询出的文档转换为对象类型
   private List<BlogDTO> setReviewData(SolrDocumentList list) {
        DocumentObjectBinder binder = new DocumentObjectBinder();
        List<BlogDTO> blogList = binder.getBeans(BlogDTO.class, list);
        return blogList;
    }

 索引技术的使用主要是使用到的查询,solr中包含非常强大的查询机制,首先是倒排序方式的查询比db中的正排序快出很多,其次 文档文件中的检索也比关系型数据库检索要来的快,另外,solr中支持的条件查询,非常多,同时还支持评分计算,文档高亮显示,分页检索,自定义返回数据类型(json、xml、csv、php、ruby等等),这里只是实现了最简单的查询,相当于select * from table where id=124

 

 三、更改索引数据

 在索引文件中,因为每条数据都是唯一的,在schema.xml中有设置

<uniqueKey>blogId</uniqueKey>

 所谓的更改索引数据就是重新创建索引,代码与创建索引有相似之处,此处省略代码

 

四、删除索引

删除索引就是直接将该索引数据删除,但是我通过solrj删除索引后,发现索引文件依然存在的,不知道是因为没有进行commit操作还是因为没有optimize操作,这个还望了解的同学指点,删除索引的代码如下:

public boolean deleteBlogIndex(List<String> blogIds) {
        SolrServer solrServer = getHttpSolrServer();
        try {
            solrServer.deleteById(blogIds);
            solrServer.commit();
            return true;
        } catch (Exception e) {    
            LOGGER.logException( e);
        }
        return false;
    }

  以上是通过solrj对索引数据的增删改查操作,有了以上技能啊,就可以简单的将solr技术使用到项目中了,当然,如果真的将solr技术使用到项目中,还需要考虑的是索引文件的定期全量创建机制、索引碎片处理、索引优化机制、查询性能优化,有可能还会用到读写分离、主从同步、服务集群、处理高并发以及与其他一些技术如redis的结合(solr实时性需要慎重使用,可以与redis结合达到业务需求),还需继续研究才行啊,希望喜欢搜索项目的同学一起学习啊

 

分享到:
评论

相关推荐

    solr的增删改查和高亮以及分组

    本文将深入探讨Solr 3.6版本中的核心功能:增删改查(CRUD)操作,高亮显示,以及分组查询。 ### 1. Solr的增删改查操作 #### 1.1 创建(Create) 在Solr中,创建文档通常涉及到定义一个XML或JSON格式的文档结构...

    solr配置和solrj使用(demo)

    为了实现Solr的高可用性和负载均衡,可以配置多个Solr服务器实例组成集群。 1. **配置多台Tomcat服务器** - 例如,在同一台主机上启动三个Tomcat实例,分别使用不同的端口:80、9888和9008。 2. **配置SolrHome...

    Solr 搜索引擎 asp.net实现 示例详细操作步骤

    我们网站搜索如果数据量大的话,我们使用数据库直接查搜索会很慢,而且由于不能自动分词,结果往往不是很理想,现在我提供了一个例子,内含详细操作步骤和简单增删改查 Solr是一个独立的企业级搜索应用服务器,它...

    SpringBoot-sel-del-up-add:SpringBoot实现简单的增删改查,并集成了Redis,Solr

    SpringBoot-sel-del-up-addSpringBoot实现简单的增删改查1.本项目是基于postman进行测试的,大家也可以自己写一下页面项目创建后,下载jar很容易出错,所以大家要提前配置好maven,多更新几次

    spring-data-solr:通过spring对solr数据的增删该查,进行封装

    **Spring Data Solr:通过Spring对Solr数据的增删改查封装** Spring Data Solr是Spring Data项目的一部分,它为Apache Solr搜索引擎提供了一种简单而强大的集成方式。Spring Data Solr允许开发者利用Spring框架的...

    最新版linux solr-8.8.2.tgz

    了解这些基础知识后,你就可以开始探索 Solr 8.8.2 的高级特性,如实时增删改查、多字段排序、高亮显示、同义词处理、地理位置搜索以及更复杂的查询表达式等。通过熟练掌握 Solr,你将能够构建强大而高效的全文搜索...

    SSM+spring-data-solr+solr7.7 全文搜索代码

    - 使用Spring Data Solr提供的`SolrTemplate`或者Repository接口,进行索引的增删改查操作。 - 将业务数据同步到Solr,构建索引,以供搜索使用。 - 在SpringMVC的Controller层处理前端请求,调用Repository接口...

    SOLR的学习资料

    在这个“SOLR的学习资料”中,我们将深入探讨如何进行SOLR的环境搭建、以及如何执行基本的增删改查操作。 **一、SOLR环境搭建** 1. **系统要求**:SOLR可以在多种操作系统上运行,包括Windows、Linux和Mac OS。...

    solr5.5.4项目示例

    在本示例中,可能已经配置了DIH来导入数据,并进行了增、删、改操作。 4. **添加索引**:向Solr添加文档(即索引)通常涉及序列化数据为Solr可理解的格式,然后使用HTTP POST请求发送到Solr服务器。在本例中,你...

    solr_api

    Solr API 是Apache Solr的核心组成部分,它提供了一组丰富的HTTP接口,允许用户与Solr索引进行交互,包括查询、文档的增删改查、配置管理等操作。Solr作为一个强大的全文搜索引擎,广泛应用于各类大数据量、高性能的...

    solr-8.1.1-src.tgz

    5. **文档增删改查(CRUD)**: - 使用HTTP接口,通过XML、JSON或CSV格式提交文档进行索引。 - 更新文档时,Solr支持替换、追加和删除操作。 6. **搜索结果排序与评分**: - 可以自定义排序规则,基于相关性、...

    php与solr交互扩展库包

    标题中的“php与solr交互扩展库包”指的是PHP与Apache Solr搜索引擎之间的一个扩展库,这个库使得在PHP环境中可以方便地与Solr服务进行数据的增删查改操作。Solr是一款强大的、高性能的全文检索服务器,常用于大型...

    solr-config_solrj-demo.rar_DEMO_solr_solr的j

    除了基础功能,Solr还有许多高级特性,如实时增删改查( Near Realtime Searching, NRT)、复杂查询表达式、自定义插件(如过滤器、查询解析器等)、地理位置搜索(Geospatial Search)等。DEMO可能涵盖了其中的一...

    hive-solr-master.zip_hive_solr_solr-hive

    这样,当我们在Hive中对数据进行增删改查操作时,这些操作会同步反映到Solr的索引中。例如,我们可以使用以下HQL(Hive Query Language)命令创建一个与Solr同步的外部表: ```sql CREATE EXTERNAL TABLE solr_...

    solr在SSM框架中使用(支持中文分词查询)

    接着,我们可以创建一个SolrService类,该类使用SolrServer对象进行索引的增删改查操作。 对于中文分词查询,我们需要在Solr的schema.xml文件中设置字段类型为支持中文分词的类型。例如,使用IK Analyzer,我们需要...

    SpringBoot整合Solr案例.docx

    在SpringBoot应用中,我们使用注解驱动的方式处理Solr的增删改查操作。实体类`Book`上使用了`@SolrDocument(solrCoreName = "book_core")`注解,指明该实体与哪个Solr核心关联。而属性上使用`@Id`和`@Field`注解,...

    Solr学习笔记(三)Solr客户端开发实例

    通过Solr客户端,我们可以与Solr服务器进行交互,实现数据的增删查改。 首先,我们需要了解Solr的基本概念。Solr服务器通常运行在一个独立的Java应用服务器上,如Tomcat。它包含几个核心组件,如索引、查询解析器、...

    java 调用solr最小依赖jiar包

    在代码中,我们可以创建一个`SolrServer`实例,通过`SolrServer`对象执行增删改查操作。例如,使用`SolrClient`(在较新的Solr版本中)的示例代码可能如下: ```java import org.apache.solr.client.solrj....

    Solr和ElasticSearch全文检索客户端代码

    综上所述,全文检索客户端代码是实现高效、便捷搜索的关键,无论是Solr还是Elasticsearch,都可以通过其提供的Java客户端工具实现数据的增删改查。在实际应用中,应根据项目需求和团队技能选择合适的全文检索引擎,...

Global site tag (gtag.js) - Google Analytics