Solr+Tomcat+zookeeper部署实战
一 、安装solr
环境说明:centos 7.3,solr 6.6,zookeeper3.4,Tomcat8.5,jdk1.8
zookeeper的部署请参考:http://www.cnblogs.com/Sunzz/p/8464284.html
1. 在/opt/下解压tomcat、solr
[root@solr_1 ~]# tar -xf apache-tomcat-8.5.23.tar.gz -C /opt/ [root@solr_1 ~]# tar -xf solr-6.6.2.tgz -C /opt/ [root@solr_1 ~]# cd /opt [root@solr_1 opt]# ln -sv apache-tomcat-8.5.23 tomcat [root@solr_1 opt]# ln -sv solr-6.6.2 solr
2. 将solr-6.6.0/server/solr-webapp/webapp复制到tomcat/webapps下,并改名为solr
1 2 | [root@solr_1 ~] # cp -r /opt/solr/server/solr-webapp/webapp/ /opt/tomcat/webapps/ [root@solr_1 ~] # mv /opt/tomcat/webapps/webapp /opt/tomcat/webapps/solr |
3. 复制所需jar包到tomcat中solr项目的lib下
① 将solr-6.6.0/server/lib/ext下的jar、
② 将solr-6.6.0/server/lib下以metrics开头的5个jar(metrics-core-3.2.2.jar、metrics-ganglia-3.2.2.jar、metrics-graphite-3.2.2.jar、metrics-jetty9-3.2.2.jar、metrics-jvm-3.2.2.jar)、
③ 将solr-6.6.0/dist/下的solr-dataimporthandler-6.6.0.jar和solr-dataimporthandler-extras-6.6.0.jar
拷贝到apache-tomcat-8.5.20/webapps/solr/WEB-INF/lib下
[root@solr_1 ~]# cp /opt/solr/server/lib/ext/*.jar /opt/solr/server/lib/metrics*.jar /opt/solr/dist/solr-dataimporthandler-*.jar /opt/tomcat/webapps/solr/WEB-INF/lib/
4. 将solr-6.6.0/server/solr下的文件拷贝至新建的solr-home下
[root@solr_1 ~]# mkdir /opt/solr/solr-home [root@solr_1 ~]# cp -r /opt/solr/server/solr/* /opt/solr/solr-home/
5. 修改apache-tomcat-8.5.20/webapps/solr/WEB-INF下的web.xml
① 找到<env-entry>,解开注释,并修改env-entry-value为solr-home的路径
命令:
[root@solr_1 ~]# vim /opt/tomcat/webapps/solr/WEB-INF/web.xml
修改后
<env-entry> <env-entry-name>solr/home</env-entry-name> <env-entry-value>/opt/solr/solr-home</env-entry-value> <env-entry-type>Java.lang.String</env-entry-type> </env-entry> |
② 去掉权限,不然访问solr会出现没有授权的错误,将两个security-constraint标签注释。
修改后:
<!-- <security-constraint> <web-resource-collection> <web-resource-name>Disable TRACE</web-resource-name> <url-pattern>/</url-pattern> <http-method>TRACE</http-method> </web-resource-collection> <auth-constraint/> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name>Enable everything but TRACE</web-resource-name> <url-pattern>/</url-pattern> <http-method-omission>TRACE</http-method-omission> </web-resource-collection> </security-constraint> --> |
6. 在/opt/tomcat/webapps/solr/WEB-INF/下创建classes文件夹
并将solr-6.6.0/server/resources/log4j.properties拷贝过去
命令:
[root@solr_1 ~]# cd /opt/tomcat/webapps/solr/WEB-INF/ [root@ WEB-INF]# mkdir classes [root@ WEB-INF]# cp -rf /opt/solr/server/resources/log4j.properties ./classes/
7. 在solr-home目录下,新建collection1文件夹
并将 /solr-6.6.0/server/solr/configsets/basic_configs中conf文件夹复制到新建的collection1文件夹中.在collection1目录下新建data文件夹.
1 2 3 | [root@solr_1 ~] # mkdir /opt/solr/solr-home/collection1 [root@solr_1 ~] # cp -r /opt/solr/server/solr/configsets/basic_configs/conf/ /opt/solr/solr-home/collection1/ [root@solr_1 ~] # mkdir /opt/solr/solr-home/collection1/data |
collection1中创建文件core.properties,写入内容
[root@solr_1 ~] # vim /opt/solr/solr-home/collection1/core.properties |
name=collection1 config=solrconfig.xml schema=managed-schema dataDir=data
8. 修改solr的端口与tomcat相同
修改/usr/local/solr/solr-home/solr.xml中的
<int name="hostPort">${jetty.port:8080}</int>
9. 启动tomcat
在浏览器输入地址:http://192.168.29.110:8080/solr/index.html
二 、配置IKAnalyzer分词
1. 解压ikanalyzer-solr6.5.zip
[root@solr_1 ~]# unzip ikanalyzer-solr6.5.zip [root@solr_1 ~]# mv ikanalyzer-solr6.5 /opt/
把ext.dic、IKAnalyzer.cfg.xml和stopword.dic复制到apache-tomcat-8.5.20\webapps\solr\WEB-INF\classes中,
[root@solr_1 ~]# mkdir /opt/tomcat/webapps/solr/WEB-INF/classes [root@solr_1 ~]# cp /opt/ikanalyzer-solr6.5/ikanalyzer-solr5/ext.dic /opt/ikanalyzer-solr6.5/ikanalyzer-solr5/IKAnalyzer.cfg.xml /opt/ikanalyzer-solr6.5/ikanalyzer-solr5/stopword.dic /opt/tomcat/webapps/solr/WEB-INF/classes
把ik-analyzer-solr5-5.x.jar 和 solr-analyzer-ik-5.1.0.jar复制到apache-tomcat-8.5.20/webapps/solr/WEB-INF/lib中;
[root@solr_1 ~]# cp /opt/ikanalyzer-solr6.5/ikanalyzer-solr5/*.jar /opt/tomcat/webapps/solr/WEB-INF/lib/
2. 打开solr-home/collection1/conf下的managed-schema文件
[root@solr_1 ~]# vim /opt/solr/solr-home/collection1/conf/managed-schema
在</schema>前加入配置:
1 2 3 4 5 6 7 8 9 | <!-- IK分词 --> <fieldType name= "text_ik" class = "solr.TextField" > <analyzer type= "index" > <tokenizer class = "org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart= "false" /> </analyzer> <analyzer type= "query" > <tokenizer class = "org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart= "true" /> </analyzer> </fieldType> |
3. 重启tomcat
进入http://192.168.29.110:8080/solr/index.html进行确认。
三 拼音配置
1.复制相关jar文件
将pinyinTokenFilter-1.1.0-RELEASE.jar和pinyinAnalyzer4.3.1.jar和pinyin4j-2.5.0.jar复制到apache-tomcat-8.5.20/webapps/solr/WEB-INF/lib目录下
[root@solr_1 ~]# cp /opt/ikanalyzer-solr6.5/pinyin* /opt/tomcat/webapps/solr/WEB-INF/lib/
2. 修改solr-home/collection1/conf下的managed-schema文件
(修改后)
1 2 3 4 5 6 7 8 9 10 11 | <!-- IK分词 --> <fieldType name= "text_ik" class = "solr.TextField" > <analyzer type= "index" > <tokenizer class = "org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart= "false" /> <filter class = "top.pinyin.index.solr.PinyinTokenFilterFactory" pinyin= "true" isFirstChar= "true" minTermLenght= "2" /> <filter class = "com.shentong.search.analyzers.PinyinNGramTokenFilterFactory" minGram= "2" maxGram= "20" /> </analyzer> <analyzer type= "query" > <tokenizer class = "org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart= "true" /> </analyzer> </fieldType> |
(上方标红的为添加内容)
重启tomcat,测试
四、同义词
1. 修改managed-schema文件中的ik分词配置
1 2 3 4 5 6 7 8 9 10 11 12 13 | <fieldType name= "text_ik" class = "solr.TextField" > <analyzer type= "index" > <tokenizer class = "org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart= "false" /> <filter class = "top.pinyin.index.solr.PinyinTokenFilterFactory" pinyin= "true" isFirstChar= "true" minTermLenght= "2" /> <filter class = "com.shentong.search.analyzers.PinyinNGramTokenFilterFactory" minGram= "2" maxGram= "20" /> <filter class = "solr.LowerCaseFilterFactory" /> </analyzer> <analyzer type= "query" > <tokenizer class = "org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart= "true" / <filter class = "solr.SynonymFilterFactory" synonyms= "synonyms.txt" ignoreCase= "true" expand= "true" /> <filter class = "solr.LowerCaseFilterFactory" /> </analyzer> </fieldType> |
2. 在solr-home\collection1\conf\synonyms.txt中添加同义词
hell,二是
诛仙,诛仙2,梦幻诛仙
五、联想词
1. 添加联想类型
首先需要加上用以联想的字段,这里假设我们对name字段进行联想,配置如下(managed-schema文件):
1 2 3 | <field name= "name" type= "text_ik" multiValued= "false" indexed= "true" stored= "true" /> <field name= "suggestion" type= "text_suggest" indexed= "true" stored= "true" multiValued= "true" /> <copyField source= "name" dest= "suggestion" /> |
suggestion字段即为suggest联想所取的字段。这里将suggestion字段设为text_suggest类型,text_suggest是一个自定义的类型,具体作用和配置后面再说。然后利用copyField将name字段拷贝到suggestion字段。那么为什么我们不直接对name字段进行联想,而是专门建立一个字段把name字段拷贝过去,乃至专门建立了一个字段类型呢?在配置中我们可以看到,name字段采用了IKAnalyzer进行了中文分词,如果我们直接对name字段进行分词,则联想出来的就会是分词之后的结果。例如期望联想的记录是“先吃水果然后吃雪糕”,最后联想出来的却是“先吃”。
2. 配置联想字段
接下来就需要建立一个专门的字段类型来配合suggest模块进行检察建议了。这里该字段名称为text_suggest,配置如下(managed-schema文件):
<fieldType name= "text_suggest" class = "solr.TextField" > <analyzer type= "index" > <tokenizer class = "solr.KeywordTokenizerFactory" /> <filter class = "solr.LowerCaseFilterFactory" /> </analyzer> <analyzer type= "query" > <tokenizer class = "solr.KeywordTokenizerFactory" /> <filter class = "solr.LowerCaseFilterFactory" /> </analyzer> </fieldType> |
在这里我们要对整个字段进行联想,因此采用KeywordTokenizerFactory作为分词器,并且使用LowerCaseFilterFactory来保证其可以不区分大小写。可以根据需要替换成自己需要的analyzer。
3. suggest模块配置
现在我们的记录表结构已经建立好了,下面我们进行suggest模块的配置。
首先我们来添加suggest模块。编辑solrconfig.xml文件,添加如下配置:
1 2 3 4 5 6 7 8 9 10 | <searchComponent name= "suggest" class = "solr.SuggestComponent" > <lst name= "suggester" > <str name= "name" >suggest</str> <str name= "lookupImpl" >AnalyzingLookupFactory</str> <str name= "dictionaryImpl" >DocumentDictionaryFactory</str> <str name= "field" >suggestion</str> <str name= "suggestAnalyzerFieldType" >text_suggest</str> <str name= "buildOnStartup" > false </str> </lst> </searchComponent> |
说明:在本配置中
1 2 3 4 5 6 | name为该suggest模块的名字; lookUpImpl为查找器,默认为JaspellLookupFactory; dictionaryImpl为字典实现; field为要联想的字段; suggestAnalyzerFieldType规定了进行联想操作所使用类型所对应的Analyzer(该字段必填); buildOnStartup表示是否在启动时建立索引。 |
具体配置信息详见https://cwiki.apache.org/confluence/display/solr/Suggester。
4. requestHandler配置
接下来我们需要配置suggest模块的requestHandler。编辑solrconfig.xml文件,添加如下配置:
1 2 3 4 5 6 7 8 9 10 | <requestHandler name= "/suggest" class = "org.apache.solr.handler.component.SearchHandler" > <lst name= "defaults" > <str name= "suggest" > true </str> <str name= "suggest.dictionary" >suggest</str> <str name= "suggest.count" > 10 </str> </lst> <arr name= "components" > <str>suggest</str> </arr> </requestHandler> |
下面解释配置中涉及到的参数。suggest参数不用说了,必须为true;
suggest.dictionary为suggest操作所需要用到的字典,应当与上面suggest模块配置中的name属性保持一致;
suggest.count为候选词数量,这里为10。
具体配置可在solr官网中找到:https://lucene.apache.org/solr/guide/6_6/suggester.html
5. 建立索引
这里我们就已经把suggest模块配置完毕了。如果suggest模块配置中buildOnStartup设置为false,则需要手动建立一次索引。建立索引链接形如:
http://192.168.29.110:8080/solr/collection1/suggest?suggest=true&suggest.dictionary=suggest&wt=json&suggest.q=Ath&suggest.build=true

6. 测试
六、集成zookeeper
本实例采用zookeeper3.4.10
1. 把solrhome中的配置文件上传到zookeeper集群
使用:zookeeper的客户端上传。
[root@solr_1 ~]# cd /opt/solr/server/scripts/cloud-scripts/ [root@solr_1 cloud-scripts]# ./zkcli.sh -zkhost 192.168.29.110:2181,192.168.29.120:2181,192.168.29.130:2181 -cmd upconfig -confdir /opt/solr/solr-home/core_shopdemo_product2/conf/ -confname myconf
查看配置文件是否上传成功:
[root@bogon bin] # bash /usr/local/zookeeper/zoo1/zookeeper-3.4.10/bin/zkCli.sh |
Connecting to localhost:2181 [zk: localhost:2181(CONNECTED) 0] ls / [configs, zookeeper] [zk: localhost:2181(CONNECTED) 1] ls /configs [myconf] [zk: localhost:2181(CONNECTED) 2] ls /configs/myconf [admin-extra.menu-top.html, currency.xml, protwords.txt, mapping-FoldToASCII.txt, _schema_analysis_synonyms_english.json, _rest_managed.json, solrconfig.xml, _schema_analysis_stopwords_english.json, stopwords.txt, lang, spellings.txt, mapping-ISOLatin1Accent.txt, admin-extra.html, xslt, synonyms.txt, scripts.conf, update-script.js, velocity, elevate.xml, admin-extra.menu-bottom.html, clustering, schema.xml]
2. 修改每一台solr的tomcat 的 bin目录下catalina.sh文件
在其中加入DzkHost指定zookeeper服务器地址:
JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS"
# Register custom URL handlers # Do this here so custom URL handles (specifically 'war:...') can be used in the security policy JAVA_OPTS="$JAVA_OPTS -Djava.protocol.handler.pkgs=org.apache.catalina.webresources" JAVA_OPTS="$JAVA_OPTS -DzkHost=192.168.29.110:2181,192.168.29.120:2181,192.168.29.130:2181"
(上方标红的为添加内容)
3. 重新启动tomcat
4. 使用collections管理功能
添加collection
说明:
1 2 3 4 5 | config set :配置文件存放位置 numShards:片区数量 replicationFactor:每一个片区提供服务的机器数量(小于机器总数) Show advanced 显示高级设置 maxShardsPerNode:最大片区数量 |
(5、6 非必须步骤)
5. 创建一个两片的collection,每片是一主一备。
在浏览器中访问:
http://192.168.29.110:8080/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2
连接中需要修改的内容:
ip:服务器ip
name:数据集名称
numShards:数据集有几个片区
replicationFactor:每一个片区提供服务的机器数量(小于机器总数)
6. 删除collection1.
http://192.168.29.110:8080/solr/admin/collections?action=DELETE&name=collection1
连接中需要修改的内容:
ip:服务器ip
name:数据集名称
七、Solr集群的使用
1. 使用solrj操作集群环境的索引库
在pom.xml增加solr的jar
1 2 3 4 5 | <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version> 6.6 . 0 </version> </dependency> |
代码:
package com.demo.util.solr; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.CloudSolrClient; 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; |
//SolrCloud 索引增删查
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | public class SolrCloudTest { private static CloudSolrClient cloudSolrClient; private static synchronized CloudSolrClient getCloudSolrClient( final String zkHost) { if (cloudSolrClient == null ) { try { cloudSolrClient = new CloudSolrClient(zkHost); } catch (Exception e) { e.printStackTrace(); } } return cloudSolrClient; } private static void addIndex(SolrClient solrClient) { try { SolrInputDocument doc1 = new SolrInputDocument(); doc1.addField( "id" , "421245251215121452521251" ); doc1.addField( "name" , "张三" ); doc1.addField( "age" , 30 ); doc1.addField( "desc" , "张三是个农民,勤劳致富,奔小康" ); SolrInputDocument doc2 = new SolrInputDocument(); doc2.addField( "id" , "4224558524254245848524243" ); doc2.addField( "name" , "李四" ); doc2.addField( "age" , 45 ); doc2.addField( "desc" , "李四是个企业家,白手起家,致富一方" ); SolrInputDocument doc3 = new SolrInputDocument(); doc3.addField( "id" , "2224558524254245848524299" ); doc3.addField( "name" , "王五" ); doc3.addField( "age" , 60 ); doc3.addField( "desc" , "王五好吃懒做,溜须拍马,跟着李四,也过着小康的日子" ); Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>(); docs.add(doc1); docs.add(doc2); docs.add(doc3); solrClient.add(docs); solrClient.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 static void search(SolrClient solrClient, String String) { SolrQuery query = new SolrQuery(); query.setQuery(String); try { QueryResponse response = solrClient.query(query); SolrDocumentList docs = response.getResults(); System.out.println( "文档个数:" + docs.getNumFound()); System.out.println( "查询时间:" + response.getQTime()); for (SolrDocument doc : docs) { String id = (String) doc.getFieldValue( "id" ); String name = (String) doc.getFieldValue( "name" ); Integer age = (Integer) doc.getFieldValue( "age" ); String desc = (String) doc.getFieldValue( "desc" ); System.out.println( "id: " + id); System.out.println( "name: " + name); System.out.println( "age: " + age); System.out.println( "desc: " + desc); System.out.println(); } } catch (SolrServerException e) { e.printStackTrace(); } catch (Exception e) { System.out.println( "Unknowned Exception!!!!" ); e.printStackTrace(); } } public static void deleteAllIndex(SolrClient solrClient) { try { solrClient.deleteByQuery( "*:*" ); // delete everything! solrClient.commit(); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { System.out.println( "Unknowned Exception !!!!" ); e.printStackTrace(); } } public static void main(String[] args) throws IOException { final String zkHost = "192.168.29.110:2181,192.168.29.120:2181,192.168.29.130:2181" ; final String defaultCollection = "collection1" ; final int zkClientTimeout = 20000 ; final int zkConnectTimeout = 1000 ; CloudSolrClient cloudSolrClient = getCloudSolrClient(zkHost); System.out.println( "The Cloud cloudSolrClient Instance has benn created!" ); cloudSolrClient.setDefaultCollection(defaultCollection); cloudSolrClient.setZkClientTimeout(zkClientTimeout); cloudSolrClient.setZkConnectTimeout(zkConnectTimeout); cloudSolrClient.connect(); System.out.println( "The cloud Server has been connected !!!!" ); |
//创建索引
SolrCloudTest.addIndex(cloudSolrClient); |
//查询
SolrCloudTest.search(cloudSolrClient, "name:李四" ); |
//删除
1 2 3 4 5 | SolrCloudTest.deleteAllIndex(cloudSolrClient); SolrCloudTest.search(cloudSolrClient, "name:李四" ); cloudSolrClient.close(); } } |
2 在solr的管理页面增加collection1的索引字段“name”,“age”,“desc”。
name和desc的字段类型使用添加的IK分词“text_ik”,
age的字段类型使用int
八 对数据库数据进行索引
数据库主机以及账号密码:
mysql: 192.168.29.100:3306 user:root password:123456
1.复制相关jar文件
将solr自带的solr-dataimporthandler-6.6.0.jar, solr-dataimporthandler-extras-6.6.0.jar和mysql-connector-java-5.1.44.jar拷贝到tomcat中solr的lib下
2.修改solrconfig.xml
找到“<requestHandler name= "/select" class = "solr.SearchHandler" >”,在其上方增加配置 <requestHandler name= "/dataimport" class = "org.apache.solr.handler.dataimport.DataImportHandler" > <lst name= "defaults" > <str name= "config" >data-config.xml</str> </lst> </requestHandler> |
3.在solrconfig.xml的同级目录下新建data-config.xml
详细配置:
<?xml version= "1.0" encoding= "UTF-8" ?> <dataConfig> <dataSource name= "source1" driver= "com.mysql.jdbc.Driver" url= "jdbc:mysql://192.168.29.100:3306/test1" user= "root" password= "123456" /> <document name= "salesDoc" > <entity pk= "id" dataSource= "source1" name= "user" query= "select id,name,sex,age,insertTime from user" deltaQuery= "select id,name,sex,age,insertTime from user where insertTime >'${dih.last_index_time}'" > <field name= "id" column= "id" /> <field name= "name" column= "name" /> <field name= "sex" column= "sex" /> <field name= "age" column= "age" /> <field name= "insertTime" column= "insertTime" /> </entity> </document> </dataConfig> |
配置说明:
1 2 3 4 5 6 7 8 9 10 | dataSource:设置数据源 document:Solr的信息的基本单位,它是一组描述某些事物的数据集合 entity:对应数据表 pk:表主键 dataSource:指定使用哪个数据源 name:表名 query:查询sql deltaQuery:增量更新时使用的查询sql ${dih.last_index_time}:最后更新时间 field:表字段 |
4.在solrconfig.xml的同级目录下新建dataimport.properties
dataimport.properties内容:
#Mon Nov 06 13:03:53 CST 2017
last_index_time=2017-11-06 13\:03\:50
user.last_index_time=2017-11-06 13\:03\:50
user.last_index_time指定user表的最后更新时间(建议使用此种方式,因为如果有多张表的话可以分别更新)
5.修改managed-schema
<field name= "id" type= "int" indexed= "true" stored= "true" required= "true" multiValued= "false" /> <field name= "name" type= "text_ik" indexed= "true" stored= "true" /> <field name= "sex" type= "int" indexed= "true" stored= "true" /> <field name= "age" type= "int" indexed= "true" stored= "true" /> <field name= "insertTime" type= "int" indexed= "true" stored= "true" /> |
6.上传文件
如solr的配置已上传至zookeeper,需重复“集成zookeeper”中的第一步将配置文件上传至zookeeper。(也可以执行“常用命令”中的“更新solr配置到zookeeper”进行单个文件上传)
7.重启tomcat,执行数据导入操作
说明:
full-import:全量索引 delta-import:增量索引 clean:清除原有索引 commit:执行后提交 entity:数据源表
8.验证是否成功
九 、定时增量更新索引
1.将solr-dataimportscheduler-1.1.jar拷贝到tomcat中solr的lib目录下面
2.修改tomcat中solr下WEB-INF/web.xml
在servlet节点前面增加:
<listener> <listener- class >org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener- class > </listener> |
3.在solr-home下创建conf文件夹
进入conf,在其中新建dataimport.properties
dataimport.properties配置
[root@solr_1 ~] # vim /opt/solr/solr-home/conf/dataimport.properties |
1 ################################################# 2 # # 3 # dataimport scheduler properties # 4 # # 5 ################################################ 6 # to sync or not to sync 7 # 1 - active; anything else - inactive 8 syncEnabled=1 9 # which cores to schedule 10 # in a multi-core environment you can decide which cores you want syncronized 11 # leave empty or comment it out if using single-core deployment 12 syncCores=collection1 13 # solr server name or IP address 14 # [defaults to localhost if empty] 15 server=localhost 16 # solr server port 17 # [defaults to 80 if empty] 18 port=8080 19 # application name/context 20 # [defaults to current ServletContextListener's context (app) name] 21 webapp=solr 22 # URL params [mandatory] 23 # remainder of URL 24 #增量 25 params=/dataimport?command=delta-import&clean=false&commit=true 26 # schedule interval 27 # number of minutes between two runs 28 # [defaults to 30 if empty] 29 interval=1 30 # 重做索引的时间间隔,单位分钟,默认7200,即1天; 31 # 为空,为0,或者注释掉:表示永不重做索引 32 reBuildIndexInterval=7200 33 # 重做索引的参数 34 reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true 35 # 重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000; 36 # 两种格式:2012-04-11 03:10:00 或者 03:10:00,后一种会自动补全日期部分为服务启动时的日期 37 reBuildIndexBeginTime=03:10:00
4.重启tomcat,并验证是否成功
在mysql中增加一条数据,等待1分钟,在solr的管理页面查看是否有增加数据
更新solr配置到zookeeper
修改schema.xml配置文件之后,根本不用登录zookeeper删除原有文件,文件会自动覆盖,这里直接上传即可,命令如下:
[root@solr_1 ~]# cd /opt/solr/server/scripts/cloud-scripts/
[root@ cloud-scripts]# ./zkcli.sh -zkhost 192.168.29.110:2181,192.168.29.120:2181,192.168.29.130:2181 -cmd upconfig -confdir /opt/solr/solr-home/core_shopdemo_product2/conf/ -confname myconf
此命令是在配置上传至zookeeper后,修改配置时使用的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)