学习主题:Solr
学习目标:
掌握solr集群的搭建
1.Solr集群-SolrCloud介绍
(1)什么是SolrCloud?
SolrCloud(solr 云)是 Solr 提供的分布式搜索方案,当你需要大规模,容错,分布
式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用
SolrCloud 的,当索引量很大,搜索请求并发很高,这时需要使用 SolrCloud 来满足这些
需求。
(2)SolrCloud的原理是什么?
SolrCloud 是基于 Solr 和 Zookeeper 的分布式搜索方案,它的主要思想是使用
Zookeeper 作为集群的配置信息中心。
2.Solr集群-创建集群
(1)如何搭建Solr集群?
4 安装 Solr 集群环境
4.1需求:
1) 在 192.168.70.147 环境中安装 zookeeper 集群(已安装)
2) 创建 4 个 tomcat 实例,修改其端口为 8080-8083
3) 使用已安装好的单机版 solr 作为集群的节点使用
4.2创建 solrcloud 目录
mkdir solrcloud
4.3安装 Zookeeper 集群
略…
4.4安装 4 个 tomcat 实例并将 tomcat 与索引库拷贝到 solrCloud 目录中
4.5修改 tomcat 端口
4.6修改 solr 服务中指向 solr 索引库的路径
5 创建集群
5.1上传索引库配置文件
把 solrhome 中的配置文件上传到 zookeeper 集群。使用 zookeeper 的客户端上传
./zkcli.sh -zkhost 192.168.92.135:2181, 192.168.92.135:2182, 192.168.92.135:2183 -cmd
upconfig -confdir /usr/local/solrcloud/solrhome1/solr/collection1/conf -confname myconf
5.2修改 solrhome 下的 solr.xml 文件,指定当前实例运行的 ip
地址及端口号。5.3修改每一台 solr 的 tomcat 的 bin 目录下 catalina.sh 文件中 加入 DzkHost 指定 zookeeper 服务器地址
JAVA_OPTS="-DzkHost=192.168.92.135:2181,192.168.92.135:2182,192.168.92.135 :2183"
(可以使用 vim 的查找功能查找到 JAVA_OPTS 的定义的位置,然后添加)
注意不能含有空格
(2)如何将Solr集群中的索引库分为两片?
创建一个新的 collection,并分两片,每片是一主一备。
使用以下命令创建:
http://192.168.92.135:8080/solr/admin/collections?action=CREATE&name=collec
tion2&numShards=2&replicationFactor=2
3.Solr集群-在集群中添加文档
(1)如何向Solr集群中添加文档?
/**
* 集群版:向索引库中添加文档
*/
public static void solrCloudAdd() throws Exception{
//1.获得zookeeper地址
String zkHost="192.168.92.135:2181,192.168.92.135:2182,192.168.92.135:2183";
//2.创建solrCloud对象
CloudSolrServer cloud=new CloudSolrServer(zkHost);
//3.给定索引库
cloud.setDefaultCollection("collection2");
for (int i=0;i<10;i++){
//4.创建文档对象
SolrInputDocument document=new SolrInputDocument();
//5.向文档内添加数据内容
document.addField("id","solr"+i);
document.addField("item_title","web服务--索引库"+i);
document.addField("item_price",1000+i);
//6.把文档内容数据插入到solr的索引库
cloud.add(document);
}
//7.提交事务
cloud.commit();
cloud.shutdown();//关闭线程
}
4.Solr集群-删除集群中的文档
(1)如何删除Solr集群中的文档?
/**
* 集群版:删除索引库中的文档
*/
public static void solrCloudDel() throws Exception{
//1.获得zookeeper地址
String zkHost="192.168.92.135:2181,192.168.92.135:2182,192.168.92.135:2183";
//2.创建solrCloud对象
CloudSolrServer cloud =new CloudSolrServer(zkHost);
//3.给定索引库
cloud.setDefaultCollection("collection2");
//4.删除索引库中文档
//1.根据主键删除
//cloud.deleteById("solr");
//2.根据查询删除
cloud.deleteByQuery("*:*");
//5.提交事务
cloud.commit();
cloud.shutdown();
}
5.Solr集群-查询集群中的文档
(1)如何查询Solr集群中的文档?
/**
* 集群版:查询索引库中文档
*/
public static void solrCloudFind() throws Exception{
//1.获得zookeeper对象
String zkSost="192.168.92.135:2181,192.168.92.135:2182,192.168.92.135:2183";
//2.创建solrCloud对象
CloudSolrServer cloud=new CloudSolrServer(zkSost);
//3.给定索引库
cloud.setDefaultCollection("collection2");
//4.创建查询对象
SolrQuery query = new SolrQuery();
//5.设置查询条件
query.setQuery("web");//查询关键字条件
query.set("df","item_keywords");//在哪个域查询
query.setStart(0);//分页查询开始
query.setRows(10);//分页查询多少
//6.执行查询:封装结果集
QueryResponse response = cloud.query(query);
//获得结果集
SolrDocumentList list = response.getResults();
//获得总条数
System.out.println("总条数:"+list.getNumFound());
//遍历结果集
for(SolrDocument var :list){
System.out.println(var.get("item_title"));
System.out.println(var.get("item_price"));
}
}