solrcloud sample

在solrcloud出来之前,如果通过solrj连接solrserver,需要程序自己实现一致性hash.
新版本的solr支持cloud的部署方式,可以自动实现lb和sharding的功能(通过CloudSolrServer类连接cloud),可以用下面代码做测试
需要的jar包如下:

apache-solr-solrj.jar
apache-solr-core.jar
zookeeper.jar   
commons-logging.jar 
apache-logging-log4j.jar 
httpclient.jar  
httpcore.jar
slf4j-api.jar
slf4j-nop.jar

sample code:

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Collection; 
import org.apache.solr.client.solrj.SolrQuery; 
import org.apache.solr.client.solrj.SolrServer; 
import org.apache.solr.client.solrj.SolrServerException; 
import org.apache.solr.client.solrj.impl.CloudSolrServer; 
import org.apache.solr.client.solrj.response.QueryResponse; 
import org.apache.solr.common.SolrDocument; 
import org.apache.solr.common.SolrDocumentList; 
import org.apache.solr.common.SolrInputDocument; 
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;   
import org.apache.solr.common.cloud.ClusterState;
import org.apache.solr.common.cloud.ZkStateReader;
   
    public class SolrCloudTest {       
       public static final Log LOG = LogFactory.getLog(SolrCloudTest.class);
        private static CloudSolrServer cloudSolrServer;             
        private  static synchronized CloudSolrServer getCloudSolrServer( final String zkHost) {   
               LOG.info("connect to :" +zkHost+"\n" );
            if(cloudSolrServer == null) {   
                try {   
                    cloudSolrServer = new CloudSolrServer(zkHost);   
                } catch(Exception e) {   
                    e.printStackTrace();                   
                }   
            }                   
            return cloudSolrServer ;   
        }   
           
        private void addIndex(SolrServer solrServer) {         
            try {
              Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
               for (int i = 0;i<=200;i++){
                     SolrInputDocument doc = new SolrInputDocument();
                     String key = "";
                     key = String. valueOf(i);
                     doc.addField( "id", key);
                     doc.addField( "test_s", key+"value" );
                     docs.add(doc);             
              }    
                LOG.info("docs info:" +docs+"\n" );
                System. out.println("docs length " + docs.size());
                solrServer.add(docs);              
                solrServer.commit();                   
            } catch(SolrServerException e) {   
                System. out.println("Add docs Exception !!!" );   
                e.printStackTrace();           
            } catch(IOException e){   
                e.printStackTrace();   
            } catch (Exception e) {   
                System. out.println("Unknowned Exception!!!!!" );   
                e.printStackTrace();   
            }                         
        }                        
        public void search(SolrServer solrServer, String Str) {         
            SolrQuery query = new SolrQuery();
            query.setRows(20); //默认row是10,只返回10条,如果设置query.setRows(Integer. MAX_VALUE)会报错,默认最大为2147483391
            query.setQuery(Str);   
            try { 
               LOG.info("query string: " + Str);
              System. out.println("query string: " + Str);
                QueryResponse response = solrServer.query(query);   
                SolrDocumentList docs = response.getResults();
                System. out.println(docs);
                System. out.println(docs.size());
                System. out.println("doc num:" + docs.getNumFound());   
                System. out.println("elapse time:" + response.getQTime());           
                for (SolrDocument doc : docs) {   
                    String area = (String) doc.getFieldValue( "test_s");   
                    String id = (String) doc.getFieldValue( "id");   
                    System. out.println("id: " + id);   
                    System. out.println("tt_s: " + area);   
                    System. out.println();   
                }   
            } catch (SolrServerException e) {   
                e.printStackTrace();   
            } catch(Exception e) {   
                e.printStackTrace();   
            }   
        }   
           
        public void deleteAllIndex(SolrServer solrServer) {   
            try {   
                solrServer.deleteByQuery( "*:*");
                solrServer.commit();   
            } catch(SolrServerException e){   
                e.printStackTrace();   
            } catch(IOException e) {   
                e.printStackTrace();   
            } catch(Exception e) {   
                e.printStackTrace();   
            }   
        }           
        public static void main(String[] args) {     
                final String zkHost = "xxxxx:8080" ;        
                final String  defaultCollection = "test" ;   
                final int   zkClientTimeout = 10000;   
                final int zkConnectTimeout = 10000;                     
                CloudSolrServer cloudSolrServer = getCloudSolrServer(zkHost);                    
                cloudSolrServer.setDefaultCollection(defaultCollection);   
                cloudSolrServer.setZkClientTimeout(zkClientTimeout);   
                cloudSolrServer.setZkConnectTimeout(zkConnectTimeout);
                try{
                     cloudSolrServer.connect();
                    System. out.println("connect solr cloud zk sucess" );           
                } catch (Exception e){   
                      LOG.error("connect to collection " +defaultCollection+" error\n");
                     System. out.println("error message is:" +e);
                     e.printStackTrace();
                     System. exit(1);
                }
                      //ZkStateReader zkStateReader = cloudSolrServer.getZkStateReader();
                      //ClusterState cloudState  = zkStateReader.getClusterState();
                      //System.out.println(cloudState);
                     
                SolrCloudTest solrt = new SolrCloudTest();
                System. out.println("=====" );
                try{
                     solrt.addIndex(cloudSolrServer);
                } catch(Exception e){
                     e.printStackTrace();
                }
                solrt.search(cloudSolrServer, "id:*");   
                //solrt.deleteAllIndex(cloudSolrServer);         
                System. out.println("hashCode" +solrt.hashCode());  
                cloudSolrServer.shutdown();           
        }         
    }

solrcloud sample,布布扣,bubuko.com

时间: 2024-10-25 08:47:10

solrcloud sample的相关文章

Solrcloud(Solr集群)

Solrcloud(Solr集群) Solrcloud介绍: SolrCloud(solr集群)是Solr提供的分布式搜索方案. 当你需要大规模,容错,分布式索引和检索能力时使用SolrCloud. 当索引量很大,搜索请求并发很高时,同样需要使用SolrCloud来满足这些需求. 不过当一个系统的索引数据量少的时候是没有必要使用SolrCloud的. SolrCloud是基于Solr和Zookeeper的分布式搜索方案.它的主要思想是使用Zookeeper作为SolrCloud集群的配置信息中心

Solr4.8.0源码分析(22)之 SolrCloud的Recovery策略(三)

Solr4.8.0源码分析(22)之 SolrCloud的Recovery策略(三) 本文是SolrCloud的Recovery策略系列的第三篇文章,前面两篇主要介绍了Recovery的总体流程,以及PeerSync策略.本文以及后续的文章将重点介绍Replication策略.Replication策略不但可以在SolrCloud中起到leader到replica的数据同步,也可以在用多个单独的Solr来实现主从同步.本文先介绍在SolrCloud的leader到replica的数据同步,下一篇

随机抽样一致算法(Random sample consensus,RANSAC)

作者:桂. 时间:2017-04-25  21:05:07 链接:http://www.cnblogs.com/xingshansi/p/6763668.html 前言 仍然是昨天的问题,别人问到最小二乘.霍夫变换.RANSAC在直线拟合上的区别.昨天梳理了霍夫变换,今天打算抽空梳理一下RANSAC算法,主要包括: 1)RANSAC理论介绍 2)RANSAC应用简介: 内容为自己的学习记录,其中很多地方借鉴了别人,最后一起给出链接. 一.RANSAC理论介绍 普通最小二乘是保守派:在现有数据下,

SolrCloud今日大纲

SolrCloud今日大纲(了解) ●    分布式集群系统基本概念 ●    SolrCloud入门 ●    SolrCloud搭建 ***************************************************************************************************** 1.    分布式集群系统基本概念介绍 1.1    单台服务器存在的问题 URL: http://localhost:8080/xxx localhost其

Sample Testlink API client in python

""" Testlink API Sample Python Client implementation """ import xmlrpclib class TestlinkAPIClient: # substitute your server URL Here SERVER_URL = "http://localhost/testlink/lib/api/xmlrpc.php" def __init__(self, dev

Sample Apps by Android Team -- Amazed

Sample Apps by Android Team 代码下载:http://pan.baidu.com/s/1eSNmdUE 本次是项目Amazed代码学习记录. 一.创建自定义View @.在onSizeChanged中,通过如参w(宽)和h(高)的比较来判断手机是处于横向(Landscape)还是纵向(Portrait). @.在onDraw中进行自定义View的界面绘制. @.绘制界面需要Canvas和Paint: 1.Cnavas:用来控制画什么,比如画直线(drawLine).画矩

SolrCloud应用简介

1.windows下启动实例工程 官网下载solr后解压到本地硬盘,在sol/bin目录下打开命令行窗口,然后测试以下命令: solr -e cloud 启动例子中的solrcould,进入交互界面,会让你输入创建的node数(默认2个),要绑定的端口,以及创建collection名称等,基本都默认即可.若想直接用默认的值创建这个工程实例直接输入命令:solr -e cloud -noprompt:solr start -cloud -s example/cloud/node1/solr -p

openstack4j a java sample demo

This is  A sample Demo package edu.hnu.lost.openstack.test; import java.util.List; import javax.ws.rs.client.Entity; import org.openstack.common.client.AbstractOpenStackClient;import org.openstack.keystone.KeystoneClient;import org.openstack.keystone

hbase java sample

通过HBaseAdmin维护表(创建,删除表) import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.