文档章节

SolrJ 操作solr增删改查

 雷开你的门
发布于 10/23 14:46
字数 473
阅读 18
收藏 0

Solr的特性包括:
• 高级的全文搜索功能 
• 专为高通量的网络流量进行的优化 
• 基于开放接口(XML和HTTP)的标准 
• 综合的HTML管理界面 
• 可伸缩性-能够有效地复制到另外一个Solr搜索服务器 
• 使用XML配置达到灵活性和适配性 
• 可扩展的插件体系

 //分页查询
 //创建SolrServer对象,要对solr
 HttpSolrServer server = new HttpSolrServer(url);
        //连接solr服务器超时时间 单位毫秒
         server.setConnectionTimeout(timeout);
        //是否允许跟踪重定向 默认false
         server.setFollowRedirects(followRedirects);
      //是否允许压缩
         server.setAllowCompression(allowCompression);
     //最大重新连接次数
         server.setMaxRetries(maxRetries);
//创建查询对象
 SolrQuery query = communitySolrHandler.createQuery(pagination);

public SolrQuery createQuery(Pagination<CommunitySolrField> pagination){
       SolrQuery query = new SolrQuery();
       CommunitySolrField k  = pagination.getDto();
       String value = k.getShortPy();
       StringBuilder sb = new StringBuilder();
       //拼接查询条件
       if (!CollectionUtils.isEmpty(k.getRegionIds())){
           for (String regionId:k.getRegionIds()){
               sb.append(" regionId:"+regionId);
           }

       }
       if (!CollectionUtils.isEmpty(k.getProjectIds())){
           for (String projectId:k.getProjectIds()){
               sb.append(" projectId:"+projectId);
           }

       }
       query.setQuery(sb.toString());
       //在满足上面条件之外 过滤下面的条件
       if (StringUtils.hasText(value)){
           if (ToolUtils.matcherZh(value)){
               query.addFilterQuery(" communityName:"+value);
           }else {
               query.addFilterQuery("shortPiny:"+value.toLowerCase()+"*" );
           }

       }
       //分页返回结果
       int  start =  ToolUtils.start(pagination.getPageNo(), pagination.getPageSize()) ;
     // 从第几条开始查询
       query.setStart(start);
       query.setRows(pagination.getPageSize());
       return  query;
   }

//更新索引 一般这段代码是用定时任务来跑得
 ConcurrentUpdateSolrServer server = new ConcurrentUpdateSolrServer(solrJSearchClient.getUrl()+ SolrTable.community.toString(), solrJSearchClient.getQueueSize(), solrJSearchClient.getThreadCount());
        List<CommunityDto> list =  communityDao.findAllCommunitySolr() ;
        if (CollectionUtils.isEmpty(list)) {
            return;
        }
        List<String> ids = new ArrayList<String>();
        List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
        SolrInputDocument doc;
        HanZi hanZi;
        for (CommunityDto communityDto:list){
            doc = new SolrInputDocument();
            hanZi = new HanZi(communityDto.getName());
            doc.addField("id",communityDto.getId());
            doc.addField("communityName",communityDto.getName());
            doc.addField("piny",communityDto.getPiny());
            doc.addField("shortPiny",hanZi.getPinYinHeadChar());
            doc.addField("sortDefault",communityDto.getSortDefault());
            doc.addField("regionId",communityDto.getDicRegionId());
            doc.addField("projectId",communityDto.getProjectId());
            docs.add(doc);
            ids.add(communityDto.getId());
        }
        try {
            //先删除
            server.deleteById(ids);
            server.commit();
            //再添加/更新索引
            server.add(docs);
            //对索引进行优化
            server.optimize();
            server.commit();
        } catch (Exception e) {
            e.printStackTrace();
        }


 

© 著作权归作者所有

上一篇: java 集合
下一篇: Bootstrap 教程
粉丝 0
博文 19
码字总数 19244
作品 0
广州
私信 提问
Solr JAVA客户端SolrJ 4.9使用示例教程

简介 SolrJ是操作Solr的JAVA客户端,它提供了增加、修改、删除、查询Solr索引的JAVA接口。SolrJ针对Solr提供了Rest 的HTTP接口进行了封装,SolrJ底层是通过使用httpClient中的方法来完成Sol...

cloud-coder
2014/08/21
3.6K
0
Solr 按日期facet 差8小时问题解决

项目中使用solrj来操作solr,日期solr会自动转换: 1.solrj在提交到solr时,时间会因为时区问题减少八小时 2.solr接收到时间后,存为底层lucene索引时时间类型为long型,是正确的时区时间,但...

zachary124
2014/06/24
726
4
Apache Solr 之 使用SolrJ操作索引库

Solrj是Solr搜索服务器的一个比较基础的客户端工具,可以非常方便地与Solr搜索服务器进行交互。最基本的功能就是管理Solr索引,包括添加、更新、删除和查询等。对于一些比较基础的应用,用S...

空云万里晴
2014/12/09
6.4K
1
有关solr的一些不明白的地方,希望得到大家的解答

最近在学习solr的使用,但是有一些不理解的地方希望在这方面了解的人能给我一些解答,非常的感谢。 第一:solr的高亮,在使用solrJ时,resp.getHighlighting().get(id).get("content")进行高...

BravoZu
2012/07/31
253
0
有关solr的一些不明白的地方,希望得到你的回答

@红薯 你好,想跟你请教个问题:因为没有人回答,因此来向您请教,打扰您了,希望得到你的回答 第一:solr的高亮,在使用solrJ时,resp.getHighlighting().get(id).get("content")进行高亮,...

BravoZu
2012/08/01
624
0

没有更多内容

加载失败,请刷新页面

加载更多

Vue.js学习笔记2 - better-scroll滚动条

better-scroll滚动条 使用作者自制的better-scroll库,实现内容的滚动。 先在package.json加上依赖: "better-scroll": "^0.1.7" 接着再npm install安装依赖。 import BScroll from 'better-......

swanf
今天
7
0
设计模式之适配器模式

定义 将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工 作。 UML类图 适配器分为两种,类适配器与对象适配器。 类适配器的UML图...

陈年之后是青葱
今天
8
0
教你玩转Linux—磁盘管理

导读 Linux磁盘管理好坏直接关系到整个系统的性能问题,Linux磁盘管理常用三个命令为df、du和fdisk。 df df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了...

问题终结者
今天
11
0
KMP

字符串匹配算法 针对被匹配字段生产一个部分匹配表 A B C D A B D 0 0 0 0 1 2 0 部分匹配表 熟悉前缀与后缀的概念 ,“部分匹配表” 的生产就是根据前缀、后缀的最苍的共有元素的长度 前缀:...

鬼才王
昨天
6
0
快速搭建Jenkins集群

关于Jenkins集群 在Jenkins上同时执行多个任务时,单机性能可能达到瓶颈,使用Jenkins集群可以有效的解决此问题,让多台机器同时处理这些任务可以将压力分散,对单机版Jenkins的单点故障的隐...

程序员欣宸
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部