solrJ的使用以及solr集群的搭建

来源:互联网 发布:有趣的事情 知乎 编辑:程序博客网 时间:2024/06/05 17:19
solr服务的搭建
1.solr是java开发的,所以需要先安装jdk,tomcat
2.把solr的压缩包上传到linux系统
3.解压solr
  tar -zxcf solr.zip
4.安装tomcat(解压即可)
5.把solr部署到tomcat
6.解压缩war包(启动tomcat即可解压)
7.把example/lib/ext目录下所有jar包放在项目中
8.创建一个solrhome(example/solr就是一个solrhome,拷贝即可)
9.在solr工程的web.xml中添加solr与solrhome的关联关系
10.启动tomcat,大功告成


solr中添加中文分词器
1.把IK Analyzer 2012FF.jar包放在solr工程的lib目录下
2.把扩展词典、配置文件放到solr工程的WEB-INF/classes目录下


solr业务域的配置
1.修改schema.xml文件
    <fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
<field name="item_title" type="text_ik" indexed="true" stored="true"/>


使用solrJ管理索引库
1.将solrJ的jar包添加的工程中
2.创建一个solrServer
  SolrServer solrServer = new HttpSolrServer("http://192.168.25.152:8080/solr");
3.创建一个文档对象SolrInputDocument
  SolrInputDocument document = new SolrInputDocument();
4.向文档中添加索引数据(必须要有id),域的名称必须在sechma.xml中有定义才行
  document.addField("id","shaobingshuai");
5.把文档对象添加到索引库中
  solrServer.add(document);
6.提交
  solrServer.commit();
7.到这里一个完整的添加流程已经走完了,接下来是删除查询
8.solrServer.deleteById("shaobingshuai");
  solrServer.commit();
  solrServer.deleteByQuery("id:shaobingshuai");
  solrServer.commit();
9.简单的查询操作
  SolrServer solrServer = new HttpSolrServer("http://192.168.25.152:8080/solr");
  SolrQuery query = new SolrQuery();
  query.setQuery("*:*");
  QueryResponse response = solrServer.query(query);
  SolrDocumentList list = response.getResults();
  接下来用for循环就可以取出所有的数据了,简单的很
  
  
  
使用solr的高亮显示功能
1.所谓高亮显示,其实solr的做法很简单,就是把你想高亮显示的部分用一个html标签包裹起来,比如<p clor="red">高亮结果</p>,这样在页面上显示就是红的了
2.在我们的开发中,代码应该这样编写
//创建一个SolrQuery对象
SolrQuery query = new SolrQuery();
//设置查询条件
query.setQuery(queryString);
//设置默认搜索域
query.set("df", "item_title");
//设置高亮显示
query.setHighlight(true);
query.addHighlightField("item_title");
query.setHighlightSimplePre("<font color='red'>");
query.setHighlightSimplePost("</font>");
//根据query对象进行查询
QueryResponse response = solrServer.query(query);
//取查询结果
SolrDocumentList solrDocumentList = response.getResults();
//取查询结果总记录数
long numFound = solrDocumentList.getNumFound();
List<SearchItem> itemList = new ArrayList<>();
//把查询结果封装到SearchItem对象中
for (SolrDocument solrDocument : solrDocumentList) {
SearchItem item = new SearchItem();
item.setCategory_name((String) solrDocument.get("item_category_name"));
item.setId((String) solrDocument.get("id"));
//取一张图片
String image = (String) solrDocument.get("item_image");
if (StringUtils.isNotBlank(image)) {
image = image.split(",")[0];
}
item.setImage(image);
item.setPrice((long) solrDocument.get("item_price"));
item.setSell_point((String) solrDocument.get("item_sell_point"));
//取高亮显示
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
String title = "";
if (list != null && list.size() > 0) {
title = list.get(0);
} else {
title = (String) solrDocument.get("item_title");
}
item.setTitle(title);
//添加到商品列表
itemList.add(item);
}
需要注意的是solr直接查出来的东西一般需要封装成我们想要的对象



solr集群的概念以及搭建
1.什么是solrCloud
  SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求。
  SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作为集群的配置信息中心。
  它有几个特色功能:
  1)集中式的配置信息
  2)自动容错
  3)近实时搜索
  4)查询时自动负载均衡
2.SolrCloud结构
  SolrCloud为了降低单机的处理压力,需要由多台服务器共同来完成索引和搜索任务。实现的思路是将索引数据进行Shard(分片)拆分,每个分片由多台的服务器共同完成,当一个索引或搜索请求过来时会分别从不同的Shard的服务器中操作索引。

  SolrCloud需要Solr基于Zookeeper部署,Zookeeper是一个集群管理软件,由于SolrCloud需要由多台服务器组成,由zookeeper来进行协调管理。


3.solr集群的搭建
  1)安装zookeeper集群
    第一步:解压zookeeper,tar -zxvf zookeeper-3.4.6.tar.gz将zookeeper-3.4.6拷贝到/usr/local/solrcloud下,复制三份分别并将目录名改为zookeeper1、zookeeper2、zookeeper3
第二步:进入zookeeper1文件夹,创建data目录。并在data目录中创建一个myid文件内容为“1”(echo 1 >> data/myid)。
第三步:进入conf文件夹,把zoo_sample.cfg改名为zoo.cfg
第四步:修改zoo.cfg。
修改:
dataDir=/usr/local/solrcloud/zookeeper1/data
clientPort=2181(zookeeper2中为2182、zookeeper3中为2183)
添加:
server.1=192.168.25.150:2881:3881
server.2=192.168.25.150:2882:3882
server.3=192.168.25.150:2883:3883
第五步:对zookeeper2、3中的设置做第二步至第四步修改
第六步:启动三个zookeeper
/usr/local/solrcloud/zookeeper1/bin/zkServer.sh start
/usr/local/solrcloud/zookeeper2/bin/zkServer.sh start
/usr/local/solrcloud/zookeeper3/bin/zkServer.sh start
查看集群状态:
/usr/local/solrcloud/zookeeper1/bin/zkServer.sh status
/usr/local/solrcloud/zookeeper2/bin/zkServer.sh status
/usr/local/solrcloud/zookeeper3/bin/zkServer.sh status
第七步:开启zookeeper用到的端口,或者直接关闭防火墙。
service iptables stop
  2)tomcat的安装,这里就不介绍了
  3)solrCloud部署依赖zookeeper,需要先启动每一台zookeeper服务器。
  4)修改SolrCloud监控端口为8080:
修改每个solrhome的solr.xml文件。
  5)每一台solr服务器和zookeeper关联
修改每一台solr的tomcat 的 bin目录下catalina.sh文件中加入DzkHost指定zookeeper服务器地址: 
JAVA_OPTS="-DzkHost=192.168.25.150:2181,192.168.25.150:2182,192.168.25.150:2183"
(可以使用vim的查找功能查找到JAVA_OPTS的定义的位置,然后添加)
  6)启动所有的solr服务!在这里就打工搞成了,接下来访问任意一个solr服务器都是访问solr集群
  7)如果集群中有四个solr节点创建新集群collection2,将集群分为两片,每片两个副本。
http://192.168.25.150:8080/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2
  8)删除集群命令;
http://192.168.25.150:8080/solr/admin/collections?action=DELETE&name=collection1