Xbin-Store(分布式商城)项目所用Linux服务系列 Solr集群安装(六)

Author Avatar
Binux 3月 06, 2017
  • 在其它设备中阅读本文章

“这篇文章将介绍如何安装Solr集群,如何对Solr集群集群进行操作,以及使用Java客户端进行操作!”

系列

前言

所用虚拟机

CentOS 6.5

IP

IP

IP

下载软件


正文

安装

安装JDK 略

Zookeeper集群安装

Xbin-Store(分布式商城)项目所用Linux服务系列 Zookeeper集群安装(三)

Tomcat安装(四台同时)

解压

tar -zxvf apache-tomcat-7.0.47.tar.gz

把解压后的Tomcat复制

/usr/local/solr/tomcat

修改端口号

vim /usr/local/solr/tomcat/conf/server/server.xml

改为80端口

71行
<Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
把solr的压缩包上传到服务器。并解压。

Solr安装

复制war包

把/root/solr-4.10.3/dist/solr-4.10.3.war包部署到tomcat/webapps/下。并改名为ROOT.war

rm -rf /usr/local/solr/tomcat/webapps/ROOT

启动tomcat自动解压。关闭tomcat。删除ROOT.war.

复制Jar包

把/root/solr-4.10.3/example/lib/ext 目录下所有的jar包复制到solr工程中。

cp /root/solr-4.10.3/example/lib/ext/* /usr/local/solr/tomcat/webapps/ROOT/WEB-INF/lib/

创建solrhome

Solrhome是存放solr服务器所有配置文件的目录。

cp -r /root/solr-4.10.3/example/solr /usr/local/solr/solrhome

修改Solr配置文件

vim /usr/local/solr/tomcat/webapps/ROOT/WEB-INF/web.xml

第41行
<env-entry>
   <env-entry-name>solr/home</env-entry-name>
   <env-entry-value>/usr/local/solr/solrhome</env-entry-value>
   <env-entry-type>java.lang.String</env-entry-type>
</env-entry>

配置中文分词

解压

IK Analyzer 2012FF_hf1.zip

复制

cp IKAnalyzer2012FF_u1.jar /usr/local/solr/tomcat/webapps/ROOT/WEB-INF/lib/

cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/solr/tomcat/webapps/ROOT/WEB-INF/classes

扩展词典及停用词词典的字符集必须是utf-8。不能使用windows记事本编辑。

配置fieldType

vim /usr/local/solr/solrhome/collection1/conf/schema.xml

跳转到文档末尾:G

<fieldType name="text_ik" class="solr.TextField">
 <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
业务字段配置

业务字段判断标准:

  • 在搜索时是否需要在此字段上进行搜索。例如:商品名称、商品的卖点、商品的描述
  • 后续的业务是否需要用到此字段。例如:商品id。

如:

<field name="item_title" 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" />
等......

配置Solr集群

上传配置文件

cd solr-4.10.3/example/scripts/cloud-scripts/

./zkcli.sh -zkhost 192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181 -cmd upconfig -confdir /usr/local/solr/solrhome/collection1/conf -confname myconf

登陆zookeeper服务器查询配置文件:

./zkCli.sh

修改solr.xml监控端口为80端口

vim /usr/local/solr/solrhome/solr.xml

31行:
<solrcloud>
<str name="host">${host:}</str>
<int name="hostPort">${jetty.port:80}</int>
<str name="hostContext">${hostContext:solr}</str>
<int name="zkClientTimeout">${zkClientTimeout:30000}</int>
<bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
</solrcloud>
和zookeeper关联

修改每一台solr的tomcat 的 bin目录下catalina.sh文件中加入DzkHost指定zookeeper服务器地址:
JAVA_OPTS=”-DzkHost=192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181”

可以使用vim的查找功能查找到JAVA_OPTS的定义的位置

启动

启动每一台solr的tomcat服务

集群配置

访问:http://192.168.1.11/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2

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

访问:http://192.168.1.11/admin/collections?action=DELETE&name=collection1

删除 collection1

solrJ访问solrCloud

public class SolrCloudTest {
    // zookeeper地址
    private static String zkHostString = "192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181";
    // collection默认名称
    private static String defaultCollection = "collection2";

    // cloudSolrServer对象
    private CloudSolrServer cloudSolrServer;
    @Before
    // 测试方法之前构造 CloudSolrServer

    public void init() {
        cloudSolrServer = new CloudSolrServer(zkHostString);
        cloudSolrServer.setDefaultCollection(defaultCollection);
        cloudSolrServer.connect();
    }

    // 向solrCloud上创建索引
    @Test
    public void testCreateIndexToSolrCloud() throws SolrServerException,
             IOException {

        SolrInputDocument document = new SolrInputDocument();
        document.addField("id", "100001");
        document.addField("title", "李四");
        cloudSolrServer.add(document);
        cloudSolrServer.commit();

    }
    @Test
    // 搜索索引

    public void testSearchIndexFromSolrCloud() throws Exception {

        SolrQuery query = new SolrQuery();
        query.setQuery("*:*");
        try {
             QueryResponse response = cloudSolrServer.query(query);
             SolrDocumentList docs = response.getResults();

             System.out.println("文档个数:" + docs.getNumFound());
             System.out.println("查询时间:" + response.getQTime());

             for (SolrDocument doc : docs) {
                 ArrayList title = (ArrayList) doc.getFieldValue("title");
                 String id = (String) doc.getFieldValue("id");
                 System.out.println("id: " + id);
                 System.out.println("title: " + title);
                 System.out.println();
             }
        } catch (SolrServerException e) {
             e.printStackTrace();
        } catch (Exception e) {
             System.out.println("Unknowned Exception!!!!");
             e.printStackTrace();
        }
    }
    @Test
    // 删除索引

    public void testDeleteIndexFromSolrCloud() throws SolrServerException, IOException {

        // 根据id删除
        UpdateResponse response = cloudSolrServer.deleteById("zhangsan");
        // 根据多个id删除
        // cloudSolrServer.deleteById(ids);
        // 自动查询条件删除
        // cloudSolrServer.deleteByQuery("product_keywords:教程");
        // 提交
        cloudSolrServer.commit();
    }
}

总结

solr 主要是用来搜索的 不需要自己在另外写 集群的安装也不算太麻烦 就是机器用的多了点 要7台虚拟机 实在没有这么多虚拟机的可以在一台机器搭伪分布式


著作权声明

本文首次发布于 Binux Blog,转载请保留以上链接