欢迎投稿

今日深度:

solr相关,(目录

solr相关,(目录


solr服务的搭建

第一步:安装jdk、安装tomcat

第二步:解压solr压缩包。(目录结构说明:contrib:扩展包;

bin:启动solr的命令;dist:源码,

目标文件<solr服务器war包,jar包,solrj相关>;

example:solr即为solrhome,scripts搭建集群需要使用到)

第三步:把dist/solr-4.10.3.war部署到tomcat下。

第四步:解压缩war包。启动tomcat解压。

第五步:需要把/root/solr-4.10.3/example/lib/ext目录下的所有的jar

包添加到solr工程中。

第六步:创建solrhome。把/root/solr-4.10.3/example/solr文件夹

复制一份作为solrhome。

第七步:告诉solr服务solrhome的位置。需要修改web.xml

 

第八步:启动tomcat。

配置中文分析器,自定义业务域

分析器使用IKAnalyzer。

使用方法:

第一步:把IKAnalyzer依赖的jar包添加到solr工程中。把分析器使用的扩展词典添加到classpath中。

第二步:需要自定义一个FieldType。Schema.xml中定义。可以在FieldType中指定中文分析器。

<fieldType name="text_ik" class="solr.TextField">

  <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>

</fieldType>

第三步:自定义域。指定域的类型为自定义的FieldType。

Sql语句:

SELECT

        a.id,

        a.title,

        a.sell_point,

        a.price,

        a.image,

        b.`name` category_name,

        c.item_desc

FROM

        tb_item a

LEFT JOIN tb_item_cat b ON a.cid = b.id

LEFT JOIN tb_item_desc c ON a.id = c.item_id

WHERE

        a.`status` = 1

<field name="item_title" type="text_ik" indexed="true" stored="true"/>

<field name="item_sell_point" type="text_ik" indexed="true" stored="true"/>

<field name="item_price"  type="long" indexed="true" stored="true"/>

<field name="item_image" type="string" indexed="false" stored="true" />

<field name="item_category_name" type="string" indexed="true" stored="true" />

<field name="item_desc" type="text_ik" indexed="true" stored="false" />

<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>

<copyField source="item_title" dest="item_keywords"/>

<copyField source="item_sell_point" dest="item_keywords"/>

<copyField source="item_category_name" dest="item_keywords"/>

<copyField source="item_desc" dest="item_keywords"/>

第四步:重新启动tomcat

索引库中导入数据

solrj的使用

public class SolrJTest {

     @Test

     public void testSolrJ() throws Exception {

           //创建连接

           SolrServer solrServer = new HttpSolrServer("http://192.168.25.154:8080/solr");

           //创建一个文档对象

           SolrInputDocument document = new SolrInputDocument();

           //添加域

           document.addField("id", "solrtest01");

           document.addField("item_title", "测试商品");

           document.addField("item_sell_point", "卖点");

           //添加到索引库

           solrServer.add(document);

           //提交

           solrServer.commit();

     }

    

     @Test

     public void testQuery() throws Exception {

           //创建连接

           SolrServer solrServer = new HttpSolrServer("http://192.168.25.154:8080/solr");

           //创建一个查询对象

           SolrQuery query = new SolrQuery();

           query.setQuery("*:*");

           //执行查询

           QueryResponse response = solrServer.query(query);

           //取查询结果

           SolrDocumentList solrDocumentList = response.getResults();

           for (SolrDocument solrDocument : solrDocumentList) {

                System.out.println(solrDocument.get("id"));

                System.out.println(solrDocument.get("item_title"));

                System.out.println(solrDocument.get("item_sell_point"));

           }

     }

}

solr集群

solr集群的架构

SolrCloud

需要用到solr+zookeeper

 

要完成的集群结构

 

zookeeper

1、集群管理

主从的管理、负载均衡、高可用的管理。集群的入口。Zookeeper必须是集群才能保证高可用。Zookeeper有选举和投票的机制。集群中至少应该有三个节点。

2、配置文件的集中管理

搭建solr集群时,需要把Solr的配置文件上传zookeeper,让zookeeper统一管理。每个节点都到zookeeper上取配置文件。

3、分布式锁

4、忘了

集群需要的服务器

Zookeeper:3台

Solr:4台

伪分布式,zookeeper三个实例、tomcat(solr)需要四个实例。

Zookeeper需要安装jdk。

集群搭建步骤

第一部分:Zookeeper集群搭建

第一步:需要把zookeeper的安装包上传到服务器。

第二步:把zookeeper解压。

第三步:把zookeeper向/usr/local/solr-cloud目录下复制三份。

第三步:配置zookeeper。

1、在zookeeper01目录下创建一个data文件夹。

2、在data目录下创建一个myid的文件

3、Myid的内容为1(02对应“2”,03对应“3”)

4、Zookeeper02、03以此类推。

5、进入conf文件,把zoo_sample.cfg文件改名为zoo.cfg

6、修改zoo.cfg,把dataDir=属性指定为刚创建的data文件夹。

7、修改zoo.cfg,把clientPort指定为不冲突的端口号(01:2181、02:2182、03:2183)

8、在zoo.cfg中添加如下内容:

server.1=192.168.25.154:2881:3881

server.2=192.168.25.154:2882:3882

server.3=192.168.25.154:2883:3883

 

第四步:启动zookeeper。

Zookeeper的目录下有一个bin目录。使用zkServer.sh启动zookeeper服务。

启动:./zkServer.sh start

关闭:./zkServer.sh stop

查看服务状态:./zkServer.sh status

第二部分:搭建solr集群

第一步:安装四个tomcat,修改其端口号不能冲突。8080~8083

第二步:向tomcat下部署solr。把单机版的solr工程复制到tomcat下即可。

第三步:为每个solr实例创建一solrhome。

第四步:为每个solr实例关联对应的solrhome。修改web.xml

第五步:修改每个solrhome下的solr.xml文件。修改host、hostPort两个属性。分别是对应的ip及端口号。

 

第六步:把配置文件上传到zookeeper。需要使用

/root/solr-4.10.3/example/scripts/cloud-scripts/zkcli.sh命令上传配置文件。

把/usr/local/solr-cloud/solrhome01/collection1/conf目录上传到zookeeper。

需要zookeeper集群已经启动。

./zkcli.sh -zkhost 192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome01/collection1/conf -confname myconf

第七步:查看是否上传成功。

使用zookeeper的zkCli.sh命令。

第八步:告诉solr实例zookeeper的位置。需要修改tomcat的catalina.sh添加

JAVA_OPTS="-DzkHost=192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"

每个节点都需要添加。

第九步:启动每个solr实例。

 

第十步:集群分片。

将集群分为两片,每片两个副本。

http://192.168.25.154:8080/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2

 

 

第十一步:删除不用collection1

http://192.168.25.154:8080/solr/admin/collections?action=DELETE&name=collection1

 

 

ZkCli.sh连接zookeeper服务端之后进行的各种操作

使用如下命令连接zookeeper服务器  ./zkCli.sh -server 127.0.0.1:2184

1.创建(使用create命令,可以创建一个zookeeper节点)

create [-s] [-e] path data acl

其中,-s或-e分别制定节点特性:顺序或临时节点。默认情况下,即不添加-s或-e参数的,创建的是持久节点。

create /zk-book 123

执行完上面的命令,就在zookeeper的根节点下创建了一个叫做/zk-book的节点,并且节点的数据内容是“123”。另外,create命令的最后一个参数是acl,它是用来进行权限控制的,缺省情况下,不做任何权限控制。

2.读取

ls:使用ls命令,可以列出zookeeper指定节点下的所有子节点。当前,这个命令只能看到指定节点下第一级的所有子节点。用法如下:

ls path [watch]

其中,path表示的是指定数据节点的节点路径。

3.get

使用get命令,可以获取zookeeper指定节点的数据内容和属性信息。用法如下:

get path [watch]

4.更新

使用set命令,可以更新指定节点的数据内容。用法如下:

set path data [version]

其中,data就是要更新的新内容。注意,set命令后面还有一个version参数,在zookeeper中,节点的数据是有版本概念的,这个参数用于指定本次更新操作是基于ZNode的哪一个数据版本进行的。

5.删除

使用delete命令,可以删除zookeeper上的指定节点。用法如下:

delete path [version]

此命令中的version参数和set命令中的version参数的作用是一致的。要删除的节点必须没有子节点。

Zookeeper的典型应用场景与实现:

1.数据发布与订阅(发布和订阅系统通常有两种模式,分别是推push和拉pull方式,Zookeeper采用的是这两种方式的结合),通常由如下几步操作完成发布和订阅,①配置存储,②配置获取③配置变更

2.负载均衡(软件负载和硬件负载),可以参考动态的DNS服务。

3.命名服务(可以生产全局Id)

4.分布式协调/通知(Mysql数据复制总线。传统的分布式系统机器之间的通信方式:心跳检测,工作进度汇报,系统调度,这三种都可以通过现在的ZooKeeper来实现)

5.集群管理(集群监控和集群控制)

6.Master选举

7.分布式锁

8.分布式队列

Stat对象状态属性说明:

czxid:即Created ZXID,表示该数据节点被创建时的事务ID

mzxid:即Modified ZXID,表示该节点最后一次被更新时的事务ID

ctime:即Created Time,表示节点被创建的时间

mtime:即Modified Time,表示该节点最后一次被更新的时间

version:数据节点的版本号。

aversion:节点的ACL版本号。

ephemeralOwner:创建该临时节点的会话的sessionID。如果该节点是持久节点,那个这个属性值为0。

dataLength:数据内容的长度。

numChildren:当前节点的子节点个数。

pzxid:表示该节点的子节点列表最后一次被修改时的事务ID。注意,只有子节点列表变更了才会变更pzxid,子节点内容变更不会影响pzxid。

Watcher接口:标准的事件处理器,其定义了事件通知的相关逻辑,包含KeeperState和EventType两个枚举类,分别代表了通知状态和事件类型,同时定义了事件回调方法,process(WatchedEvent event)。

Watcher特性总结:

一次性;客户端串行执行(客户端Watcher回调的过程是一个串行同步的过程);轻量。

 使用solrj连接集群

@Test

     public void testSolrClout() throws Exception {

           //创建一个SolrServer对象

           CloudSolrServer solrServer = new CloudSolrServer("192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183");

           //设置默认的collection

           solrServer.setDefaultCollection("collection2");

           //创建一个文档对象

           SolrInputDocument document = new SolrInputDocument();

           document.addField("id", "test01");

           document.addField("item_title", "title1");

           //添加文档

           solrServer.add(document);

           //提交

           solrServer.commit();

          

     }

www.htsjk.Com true http://www.htsjk.com/solr/45881.html NewsArticle solr相关,目录 solr服务的搭建 第一步安装jdk、安装tomcat 第二步解压solr压缩包。目录结构说明contrib扩展包 bin启动solr的命令dist源码 目标文件solr服务器war包jar包,solrj相关 examplesolr即为...
评论暂时关闭