Solrj操作Solr4.0/Solr4.3中CloudSolrServer的一般过程

一、准备工作:创建eclipse工程

1.        下载solr4.0_src的源码包,解压后,进入目录中,

在命令行执行:ant eclipse 则可以生成一个eclipse工程,会在目录中多了关于eclipse工程的文件:.classpath 和 .project;

在eclipse导入该生成的工程(lucene-solr),工程名为lucene-solr,可以看到其全部源码;

编写自己的代码,就能测试了!

 

注意:需要安装ant 工具,以及ivy包,搜一下,去appache下来,配置好,才能编译通过。Ant编译时间有点长。关于ant(another neat tool)不再过多介绍,网上有很多教程。只要明白 ant相当于一个make的工具,其解析biuld.xml文件的相关指令。

 

2.        下载solr4.0 zip 包,将其中的所有jar包都添加你的eclipse工程中。(之所以是所有,以防万一编译不过,省的猜缺少那个包,找呀找的!)

 

3.        结合网上关于solr的搭建教程,进行搭建solr,可以用tomcat,也可以用jetty。

我用的jetty+zookeeper,(由于对tomcat的集群配置不了解),

zookeeper是独立的zookeeper,而不是jetty内嵌的zookeeper;可以从appache上直接下载!

 

4.        进行相关集群的配置,配置集群,用在工程中用solrj操纵solrCloud

 

二、用solrj操纵CloudSolrServer的一般步骤

1.        创建CloudSolrServer的实例: 2种方式:

(a)    CloudSolrServer cloudSolrServer=  new CloudSolrServer(zkHostURL);

(b)    CloudSolrserver.cloudSolrServer =  new CloudSolrServer(zkHostURL,lbHttpSolrServer);

 

2.        对CloudSolrServer实例进行设置

(a)    cloudSolrServer.setDefaultCollection(defaultCollectionName);

(b)    cloudSolrServer.setzkClientTimeout(zkClientTimeout);

(c)    cloudSolrServer.setzkConnectTimeout(zkConnectionTimeout);

 

3.        将cloudSolrServer实例连接到zookeeper

(a)    cloudSolrServer.connect();

4.        CloudSolrServer 的实例cloudSolrServer 实例化、连接完成,进而可以对其进行add、query、delete操作。

(a)    建index:准备document,最好批量添加,有利于提高性能。添加文档的字段于solr中配置文件schema.xml有关,需要对其设置。

(b)    通过SolrQuery 可以对cloudSolrServer实例进行各种查找操作。

(c)    Delete操作可以通过id、Query的结果进行delete。

 

5.        操作结束,关闭CloudSolrServer实例,以释放资源。

cloudSolrServer.shutdown();

 

实例代码如下:

package cn.wzb.cloud;  
  
import java.io.IOException;  
import java.net.MalformedURLException;  
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.solr.common.cloud.CloudState;  
import org.apache.solr.common.cloud.ZkStateReader;  
  
  
  
  
  
public class TestCloudSolr {      
    private static CloudSolrServer cloudSolrServer;  
      
    private  static synchronized CloudSolrServer getCloudSolrServer(final String zkHost) {  
        if(cloudSolrServer == null) {  
            try {  
                cloudSolrServer = new CloudSolrServer(zkHost);  
            }catch(MalformedURLException e) {  
                System.out.println("The URL of zkHost is not correct!! Its form must as below:\n zkHost:port");  
                e.printStackTrace();  
            }catch(Exception e) {  
                e.printStackTrace();                  
            }  
        }  
          
        return cloudSolrServer;  
    }  
      
    private void addIndex(SolrServer solrServer) {        
        try {  
            SolrInputDocument doc1 = new SolrInputDocument();  
            doc1.addField("id", "1");  
            doc1.addField("name", "张民");  
          
      
            SolrInputDocument doc2 = new SolrInputDocument();  
            doc2.addField("id", "2");  
            doc2.addField("name", "刘俊");  
              
      
            SolrInputDocument doc3 = new SolrInputDocument();  
            doc3.addField("id", "3");  
            doc3.addField("name", "刘俊2");  
              
      
            Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();  
            docs.add(doc1);  
            docs.add(doc2);  
            docs.add(doc3);  
              
            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 String) {        
        SolrQuery query = new SolrQuery();  
        query.setQuery(String);  
  
        try {  
            QueryResponse response = solrServer.query(query);  
            SolrDocumentList docs = response.getResults();  
  
            System.out.println("文档个数:" + docs.getNumFound());  
            System.out.println("查询时间:" + response.getQTime());  
  
            for (SolrDocument doc : docs) {  
                String name = (String) doc.getFieldValue("name");  
                String id = (String) doc.getFieldValue("id");  
                System.out.println("id: " + id);  
                System.out.println("name: " + name);  
                System.out.println();  
            }  
        } catch (SolrServerException e) {  
            e.printStackTrace();  
        } catch(Exception e) {  
            System.out.println("Unknowned Exception!!!!");  
            e.printStackTrace();  
        }  
    }  
      
    public void deleteAllIndex(SolrServer solrServer) {  
        try {  
            solrServer.deleteByQuery("*:*");// delete everything!  
            solrServer.commit();  
        }catch(SolrServerException e){  
            e.printStackTrace();  
        }catch(IOException e) {  
            e.printStackTrace();  
        }catch(Exception e) {  
            System.out.println("Unknowned Exception !!!!");  
            e.printStackTrace();  
        }  
    }  
      
    /** 
     * @param args 
     */  
    public static void main(String[] args) {          
        final String zkHost = "localhost:2181";       
        final String  defaultCollection = "collectionOne";  
        final int  zkClientTimeout = 20000;  
        final int zkConnectTimeout = 1000;  
          
        CloudSolrServer cloudSolrServer = getCloudSolrServer(zkHost);         
        System.out.println("The Cloud SolrServer Instance has benn created!");  
          
        cloudSolrServer.setDefaultCollection(defaultCollection);  
        cloudSolrServer.setZkClientTimeout(zkClientTimeout);  
        cloudSolrServer.setZkConnectTimeout(zkConnectTimeout);    
          
          
        cloudSolrServer.connect();  
        System.out.println("The cloud Server has been connected !!!!");  
          
        ZkStateReader zkStateReader = cloudSolrServer.getZkStateReader();  
        CloudState cloudState  = zkStateReader.getCloudState();  
        System.out.println(cloudState);  
          
        //测试实例!  
        TestCloudSolr test = new TestCloudSolr();         
        System.out.println("测试添加index!!!");       
        //添加index  
        test.addIndex(cloudSolrServer);  
          
        System.out.println("测试查询query!!!!");  
        test.search(cloudSolrServer, "id:*");  
          
        System.out.println("测试删除!!!!");  
        test.deleteAllIndex(cloudSolrServer);  
        System.out.println("删除所有文档后的查询结果:");  
        test.search(cloudSolrServer, "*:*");      
          
          
                  
         // release the resource   
        cloudSolrServer.shutdown();  
   
    }  
  
}  

测试结果如下:

SLF4J: Failed to load class"org.slf4j.impl.StaticLoggerBinder".

SLF4J: Defaulting to no-operation(NOP) logger implementation

SLF4J: Seehttp://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

The Cloud SolrServer Instancehas benn created!

The cloud Server has beenconnected !!!!

live nodes:[jiqh:8502_solr,jiqh:8501_solr] collections:{collectionOne={slice1=Slice [shards={jiqh:8501_solr_core_collectionOne_slice1_shard1=shard=slice1

roles=null

leader=true

state=active

core=core_collectionOne_slice1_shard1

collection=collectionOne

node_name=jiqh:8501_solr

base_url=http://jiqh:8501/solr

,jiqh:8502_solr_core_collectionOne_slice1_shard2=shard=slice1

roles=null

state=active

core=core_collectionOne_slice1_shard2

collection=collectionOne

node_name=jiqh:8502_solr

base_url=http://jiqh:8502/solr

}, name=slice1], slice2=Slice[shards={jiqh:8501_solr_core_collectionOne_slice2_shard2=shard=slice2

roles=null

leader=true

state=active

core=core_collectionOne_slice2_shard2

collection=collectionOne

node_name=jiqh:8501_solr

base_url=http://jiqh:8501/solr

,jiqh:8502_solr_core_collectionOne_slice2_shard1=shard=slice2

roles=null

state=active

core=core_collectionOne_slice2_shard1

collection=collectionOne

node_name=jiqh:8502_solr

base_url=http://jiqh:8502/solr

}, name=slice2]}}

测试添加index!!!

测试查询query!!!!

文档个数:3

查询时间:15

id: 1

name: 张民

 

id: 2

name: 刘俊

 

id: 3

name: 刘俊2

 

测试删除!!!!

删除所有文档后的查询结果:

文档个数:0

查询时间:0

你可能感兴趣的:(Solr,solrCloud,solrj,索引维护,CloudSolrServer)