Solr的环境
- Solr是java开发,需要安装jdk
https://blog.youkuaiyun.com/weixin_42869365/article/details/83894210 - solr是一个war包,一个web工程,要运行在一个web工程里,∴需要安装Tomcat
- 安装环境Linux
搭建步骤
- solr上传到linux下的usr/solr,并解压缩
tar zxf solr-4.10.3.tgz.tgz
- 安装Tomcat,解压缩即可
https://blog.youkuaiyun.com/weixin_42869365/article/details/83956269 - 复制一份apache-tomcat-7.0.47文件到/usr/local/solr/中
cp apache-tomcat-7.0.47 /usr/local/solr/ -r
- solr是一个war包,∴把solr的war包部署到Tomca下的webapps中,并改名为solr.war
solr-4.10.3.war 在 /usr/solr/solr-4.10.3/dist下面
cp solr-4.10.3.war /usr/local/solr/apache-tomcat-7.0.47/webapps/solr.war
- 解压缩solr.war (启动tomcat就能解压缩solr.war产生一个solr文件夹)
- 启动tomcat,关闭tomcat后删除solr.war
cd /usr/local/solr/apache-tomcat-7.0.47
bin/startup.sh
tail -f logs/catalina.out
bin/shutdown.sh
cd webapps
rm -f solr.war
- 把/usr/solr/solr-4.10.3/example/lib/ext目录下的所有的jar包,添加到solr工程中
cp * /usr/local/solr/apache-tomcat-7.0.47/webapps/solr/WEB-INF/lib
- 创建一个solrhome。把/usr/solr/solr-4.10.3/example下面的solr文件夹复制到/usr/local/solr下,并改名为solrhome
cp -r solr /usr/local/solr/solrhome
- 关联solr及solrhome。需要修改solr工程的web.xml文件
vim /usr/local/solr/apache-tomcat-7.0.47/webapps/solr/WEB-INF/web.xml
- 启动tomcat,solr就随之启动
cd /usr/local/solr/apache-tomcat-7.0.47
bin/startup.sh
tail -f logs/catalina.out
- 如果通过页面访问192.168.25.131:8080/solr,出现如下页面,说明启动成功
注意:访问之前要关闭防火墙,否则通过页面是访问不到的
chkconfig iptables off
永久性关闭,需要重启
solr业务域的配置
创建对应的业务域,需要制定中文分析器
步骤:
- 把中文分析器添加到工程中。把IKAnalyzer2012FF_u1.jar添加到solr工程的lib目录下
/usr/local/solr/apache-tomcat-7.0.47/webapps/solr/WEB-INF/lib
- 在
/usr/local/solr/apache-tomcat-7.0.47/webapps/solr/WEB-INF
目录下创建classes文件夹,把扩展词典(ext_stopword.dic、mydict.dic)、配置文件(IKAnalyzer.cfg.xml)放到solr工程的WEB-INF/classes目录下 - 想让中文分析器生效,还必须在schema.xml中配置一个FieldType,制定使用IKAnalyzer。
修改Solr(/usr/local/solr/solrhome/collection1/conf
)的schema.xml文件,添加如下FieldType代码
<fieldType name="text_ik" class="solr.TextField"> //name可以随便改,class必须是TextField
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> //指定了分析器
</fieldType>
- 配置业务域,type制定使用自定义的FieldType。设置业务系统Field
schema.xml中定义(商品Id,商品标题,商品卖点,商品价格,商品图片,分类名称)
<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_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"/>
- 重启tomcat
- 通过页面查看定义好的业务域是否可行 http://192.168.25.131:8080/solr
测试
@Test
public void addDocument() throws Exception {
//创建一个SolrServer对象,创建一个连接。参数solr服务的url
SolrServer solrServer = new HttpSolrServer("http://192.168.25.131:8080/solr/collection1");
//创建一个文档对象SolrInputDocument
SolrInputDocument document = new SolrInputDocument();
//向文档对象中添加域。文档中必须包含一个id域,所有的域的名称必须在schema.xml中定义。
document.addField("id", "doc01");
document.addField("item_title", "测试商品01");
document.addField("item_price", 1000);
//把文档写入索引库
solrServer.add(document);
//提交
solrServer.commit();
}
通过页面显示 http://192.168.25.131:8080/solr/#/collection1/query
@Test
public void deleteDocument() throws Exception {
SolrServer solrServer = new HttpSolrServer("http://192.168.25.131:8080/solr/collection1");
//删除文档
//solrServer.deleteById("doc01");
//域名+关键字
solrServer.deleteByQuery("id:doc01");
//提交
solrServer.commit();
}