一、准备工作
Jdk版本 1.8.0_151。
Tomcat版本 apache-tomcat-8.0.50
Solr版本 solr-7.0.0
二、安装solr
1、安装jdk不会的参考点击打开链接
tomcat安装请自行百度
2、安装solr
2.1、首先将solr-7.0.0.tgz上传到服务器,然后解压
[root@xiaojie ~]# tar -zxf solr-7.0.0.tgz
[root@xiaojie ~]# ll
然后会有一个solr-7.0.0文件
2.2、在/usr/local新建一个文件solr 将tomcat文件复制到solr文件下并命名为solrtomcat
[root@xiaojie local]# mkdir solr
[root@xiaojie local]# cp /root/apache-tomcat-8.0.50 /usr/local/solr/solrtomcat -r
2.3、进入solr-7.0.0,复制并重命名solr-7.3.0目录里的server/solr-webapp/webapp文件夹到solrtomcat的webapps目录并重命名为solr。
[root@xiaojie solr-7.0.0]# cd server
[root@xiaojie server]# ll
total 176
drwxr-xr-x 2 root root 4096 Jun 12 03:15 contexts
drwxr-xr-x 2 root root 4096 Jun 12 03:15 etc
drwxr-xr-x 3 root root 4096 Jun 12 03:15 lib
drwxr-xr-x 2 root root 4096 Jun 12 03:15 modules
-rw-r--r-- 1 root root 3977 Sep 8 2017 README.txt
drwxr-xr-x 2 root root 4096 Jun 12 03:15 resources
drwxr-xr-x 3 root root 4096 Sep 8 2017 scripts
drwxr-xr-x 3 root root 4096 Jun 12 03:15 solr
drwxr-xr-x 3 root root 4096 Sep 8 2017 solr-webapp
-rw-r--r-- 1 root root 142488 Oct 28 2016 start.jar
[root@xiaojie solr-webapp]# cp webapp /usr/local/solr/solrtomcat/webapps/solr -r
[root@xiaojie solr-webapp]#
2.4、将需要的jar包,复制到部署的solrtomcat 的WEB-INF/lib/ 下
将server/lib/ext/下的所有jar复制到/usr/local/solr/solrtomcat/webapps/solr/WEB-INF/lib
[root@xiaojie server]# cd lib/ext/
[root@xiaojie ext]# ll
total 552
-rw-r--r-- 1 root root 16519 Apr 4 2014 jcl-over-slf4j-1.7.7.jar
-rw-r--r-- 1 root root 4730 Apr 4 2014 jul-to-slf4j-1.7.7.jar
-rw-r--r-- 1 root root 489884 May 26 2012 log4j-1.2.17.jar
-rw-r--r-- 1 root root 29257 Apr 4 2014 slf4j-api-1.7.7.jar
-rw-r--r-- 1 root root 8870 Apr 4 2014 slf4j-log4j12-1.7.7.jar
[root@xiaojie ext]# cp * /usr/local/solr/solrtomcat/webapps/solr/WEB-INF/lib
[root@xiaojie ext]#
将server/lib/metrics* 开头的5个jar复制到 /usr/local/solr/solrtomcat/webapps/solr/WEB-INF/lib
-rw-r--r-- 1 root root 112565 Oct 28 2016 jetty-webapp-9.3.14.v20161028.jar
-rw-r--r-- 1 root root 50317 Oct 28 2016 jetty-xml-9.3.14.v20161028.jar
-rw-r--r-- 1 root root 129402 Mar 20 2017 metrics-core-3.2.2.jar
-rw-r--r-- 1 root root 9916 Mar 20 2017 metrics-ganglia-3.2.2.jar
-rw-r--r-- 1 root root 22056 Mar 20 2017 metrics-graphite-3.2.2.jar
-rw-r--r-- 1 root root 20053 Mar 20 2017 metrics-jetty9-3.2.2.jar
-rw-r--r-- 1 root root 40188 Mar 20 2017 metrics-jvm-3.2.2.jar
[root@xiaojie lib]# cp metrics-* /usr/local/solr/solrtomcat/webapps/solr/WEB-INF/lib
[root@xiaojie lib]#
2.5、复制log4j配置文件
把server/resources/目录下的log4j.properties,复制到刚才部署的solr的WEB-INF/,要创建一个classes的目录
[root@xiaojie server]# cp resources/log4j.properties /usr/local/solr/solrtomcat/webapps/solr/WEB-INF/classes/
[root@xiaojie server]#
2.6、创建solr home
复制并重命名solr-7.0.0/servier/solr为/usr/local/solr/solrhome
[root@xiaojie resources]# cp ../solr /usr/local/solr/solrhome -r
[root@xiaojie resources]#
2.7、修改solr 工程下的web.xml 告知solrhome的位置
注释掉最后一句不然会报403错误。
2.8、保存退出。启动tomcat
[root@xiaojie WEB-INF]# cd ../../../
[root@xiaojie webapps]# cd ../
[root@xiaojie solrtomcat]# cd bin/
[root@xiaojie bin]# ./startup.sh
Using CATALINA_BASE: /usr/local/solr/solrtomcat
Using CATALINA_HOME: /usr/local/solr/solrtomcat
Using CATALINA_TMPDIR: /usr/local/solr/solrtomcat/temp
Using JRE_HOME: /usr/java/jdk1.8.0_151
Using CLASSPATH: /usr/local/solr/solrtomcat/bin/bootstrap.jar:/usr/local/solr/solrtomcat/bin/tomcat-juli.jar
Tomcat started.
[root@xiaojie bin]#
浏览器访问http://ip:8080/solr/index.html
出现以上界面就说明安装成功了。
出错总结
错误1、如果出现了404,请检查URL,如果URL无误,请检查jar包是否拷贝全了。
错误2、如果报错找不到主机名,请做如下修改
报错:java.net.UnknownHostException: 主机名: 主机名
修改/etc/hosts文件
127.0.0.1 主机名 localhost.localdomain localhost
或是再添加一条
127.0.0.1 主机名
主机名是新加的,原来没有,保存,问题解决。
错误3、若虚拟机安装多个tomcat请自行修改端口号,避免保持端口冲突,请检查防火墙是否关闭,或者被访问的端口是否放行。方法如下,将你的端口添加进来即可。
然后重启防火墙配置生效
三、配置分词词典
3.1、添加库
name:自定义的名字,建议和instanceDir保持一致
instanceDir: solrhome目录下的实例类目
dataDir:默认填data即可
config:指定配置文件,new_core/conf/solrconfig.xml
schema:指定schema.xml文件,new_core/conf/schema文件(实际上是managed-schema文件)
注意:红色框内的内容,instanceDir and dataDir need to exist before you can create the core
要求在创建solr核心时,instanceDir实例目录在sold home 中存在
如果instanceDir实例目录不存在,点击添加会有如下提示,但会在solr/home中多一个instanceDir实例目录。
提示显示缺少solrconfig.xml
(1)、将/usr/local/solr/solrhome/configsets/sample_techproducts_configs/conf 拷贝到mycore文件下
[root@xiaojie sample_techproducts_configs]# cp conf /usr/local/solr/solrhome/mycore -r
(2)、将contrib目录,dist目录拷贝到solrhome目录中
[root@xiaojie solr-7.0.0]# cp contrib dist /usr/local/solr/solrhome -r
[root@xiaojie solr-7.0.0]#
(3)、修改mycore/config/solrconfig.xml
将文件中<lib dir="${solr.install.dir:../../../..}.." 替换为 <lib dir=“/usr/local/solrhome/…."
(4) 、刷新页面,添加core出现如下页面添加成功
3.2、手动导入数据
a、引入相应jar包和ik的配置文件
-rw-r--r-- 1 root root 41 Jun 5 2016 ext.dic
-rw-r--r-- 1 root root 404 Jun 5 2016 IKAnalyzer.cfg.xml
-rw-r--r-- 1 root root 1167537 Jun 5 2016 ik-analyzer-solr5-5.x.jar
-rw-r--r-- 1 root root 912 Mar 30 2017 solr-analyzer-ik-5.1.0.jar
-rw-r--r-- 1 root root 8245 Jun 5 2016 stopword.dic
-rw-r--r-- 1 root root 209862 Mar 30 2017 pinyin4j-2.5.0.jar
-rw-r--r-- 1 root root 10398 Mar 30 2017 pinyinAnalyzer4.3.1.jar
b、将配置文件拷贝到solr的classes文件,将jar放到lib文件
-rw-r--r-- 1 root root 209862 Mar 30 2017 pinyin4j-2.5.0.jar
-rw-r--r-- 1 root root 10398 Mar 30 2017 pinyinAnalyzer4.3.1.jar
[root@xiaojie pinyin]# cp pinyin* /usr/local/solr/solrtomcat/webapps/solr/WEB-INF/lib/
[root@xiaojie pinyin]#
-rw-r--r-- 1 root root 41 Jun 5 2016 ext.dic
-rw-r--r-- 1 root root 404 Jun 5 2016 IKAnalyzer.cfg.xml
-rw-r--r-- 1 root root 1167537 Jun 5 2016 ik-analyzer-solr5-5.x.jar
-rw-r--r-- 1 root root 912 Mar 30 2017 solr-analyzer-ik-5.1.0.jar
-rw-r--r-- 1 root root 8245 Jun 5 2016 stopword.dic
[root@xiaojie ikanalyzer-solr5]# cp ik-analyzer-solr5-5.x.jar solr-analyzer-ik-5.1.0.jar /usr/local/solr/solrtomcat/webapps/solr/WEB-INF/lib/
[root@xiaojie ikanalyzer-solr5]#
复制配置文件
[root@xiaojie ikanalyzer-solr5]#cp ext.dic IKAnalyzer.cfg.xml stopword.dic /usr/local/solr/solrtomcat/webapps/solr/WEB-INF/classes/
c、修改配置文件
修改/usr/local/solr/solrhome/mycore/conf/managed-schema文件
添加如下内容
<!--添加拼音词典-->
<fieldType name="text_pinyin" class="solr.TextField" positionIncrementGap="0">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory"/>
<filter class="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory" minTermLenght="2" />
<filter class="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory" minGram="1" maxGram="20" />
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory"/>
<filter class="com.shentong.search.analyzers.PinyinTransformTokenFilterFactory" minTermLenght="2" />
<filter class="com.shentong.search.analyzers.PinyinNGramTokenFilterFactory" minGram="1" maxGram="20" />
</analyzer>
</fieldType>
<!-- 我添加的IK分词 -->
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>
</analyzer>
</fieldType>
<!--配置数据内容--><!--根据实际需要配置字段-->
<field name="item_title" type="text_pinyin" indexed="true" stored="true"/>
<field name="item_city_id" type="pint" indexed="false" stored="true" />
(这里面的字段发生了变化)int对应pint ,long 对应plong如下图所示
配置复制字段
<!--配置复制字段-->
<field name="item_keywords" type="text_pinyin" indexed="true" stored="false" multiValued="true"/>
<copyField source="item_shopname" dest="item_keywords"/>
d:测试
若没有core,再重新添加一下。出现下面界面证明配置成功。
3.3添加数据
public void addDocument() throws Exception {
//创建一连接
SolrServer solrServer = new HttpSolrServer("http://192.168.220.121:8080/solr/mycore");
//创建一个文档对象
SolrInputDocument document = new SolrInputDocument();
document.addField("id", "test000");
document.addField("item_title", "测试商品2");
document.addField("item_price", 54321);
//把文档对象写入索引库
solrServer.add(document);
//提交
solrServer.commit();
}
@Test
public void testSolr() throws SolrServerException, IOException{//查询所有
SolrServer solrServer=new HttpSolrServer("http://192.168.220.121:8080/solr/mycore");
//solrServer.deleteById("test001");
solrServer.deleteByQuery("*:*");
solrServer.commit();
}
@Test
public void testQuery() throws SolrServerException{//过滤查询
SolrServer solrServer=new HttpSolrServer("http://192.168.220.121:8080/solr/mycore");
SolrQuery query=new SolrQuery();
query.set("q", "*:*");
String [] fq={"item_cat_id:2"};
query.addFilterQuery(fq); //过滤
QueryResponse result = solrServer.query(query);
SolrDocumentList results = result.getResults();
for (SolrDocument list:results){
String str1 = list.get("item_gid").toString();
String str2=list.get("item_title").toString();
System.out.println("分类gid-----"+str1);
System.out.println("商品名称-----"+str2);
}
}
3、4、托管数据(此处的内容转载来自
点击打开链接)