Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引 。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。
一.下载
从Solr官方网站(http://lucene.apache.org/solr/ )
Solr使用指南可参考:https://wiki.apache.org/solr/FrontPage。
二.安装步骤(linux下)
1、安装linux、jdk、tomcat。(这个就不说了吧.嘻嘻!)
2、先在local文件夹下创建一个solr文件夹
[root@iZ82qp7lai5ytzZ ~]# mkdir /usr/local/solr
3.进入solr文件夹,把solr的压缩包上传到这里。并解压。
[root@iZ82qp7lai5ytzZ ~]# cd /usr/local/solr/
4、 把solr-4.10.3/dist/solr-4.10.3.war包部署到tomcat下。并改名为solr.war
[root@iZ82qp7lai5ytzZ ~]# cp solr-4.10.3.war /usr/local/tomcat/webapps/solr.war(此处路径根据自己tomcat的位置)
5、解压war包。启动tomcat自动解压。关闭tomcat。删除solr.war.(不关闭tomcat删除war会连解压后的文件夹一起删...)
6、把solr-4.10.3/example/lib/ext 目录下所有的jar包复制到solr工程中。
[root@iZ82qp7lai5ytzZ ~]# cp * /usr/local/tomcat/webapps/solr/WEB-INF/lib/
7、创建solrhome。Solrhome是存放solr服务器所有配置文件的目录。
[root@iZ82qp7lai5ytzZ ~]# mkdir /usr/local/solr/solrhome
将example文件夹中的solr复制到solrhome中
[root@iZ82qp7lai5ytzZ example]# cp -r solr /usr/local/solr/solrhome
8、告诉solr服务器solrhome的位置。需要修改刚刚部署到tomcat下solr工程的web.xml文件。
将路径填进去(注意注释去掉)
9、启动tomcat
10、配置业务字段
在solr中默认是英文分析器,需要手工配置。配置一个FieldType(下文中有),在FieldType中指定中文分析器。
Solr中的字段必须是先定义后使用。
11、中文分析器的配置
第一步:使用IK-Analyzer。把分析器的文件夹上传到服务器。
第二步:需要把分析器的jar包添加到solr工程中
[root@iZ82qp7lai5ytzZ IK Analyzer 2012FF_hf1]# cp IKAnalyzer2012FF_u1.jar /usr/local/tomcat/webapps/solr/WEB-INF/lib/
第三步:需要把IKAnalyzer需要的扩展词典及停用词词典、配置文件复制到solr工程的classpath。
先在solr工程的WEB-INF下创建classes文件夹
然后将这三个东西复制到classes下
root@bogon IK Analyzer 2012FF_hf1]# cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/solr/tomcat/webapps/solr/WEB-INF/classes
注意:扩展词典及停用词词典的字符集必须是utf-8。不能使用windows记事本编辑。
第四步:配置fieldType(就是上文提到的)。需要在solrhome/collection1/conf/schema.xml中配置。
技巧:使用vi、vim跳转到文档开头gg。跳转到文档末尾:G
业务字段判断标准:
(1)在搜索时是否需要在此字段上进行搜索。例如:商品名称、商品的卖点、商品的描述
(2)后续的业务是否需要用到此字段。例如:商品id。
field name="item_title" type="text_ik" indexed="true" stored="true"/>
重新启动tomcat
12、用java操作
org.apache.solr solr-solrj 4.10.3
package com.mj.service.slor; import com.mj.mapper.product.ProductMapper; import com.mj.pojo.product.Product; import com.mj.result.util.TTResult; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.common.SolrInputDocument; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.IOException; import java.util.List; /** * @author Mr.Wen * @description * @date 2018/1/18 */ @Service public class SolrSearchServiceImpl implements SolrSearchService { @Autowired private SolrServer solrServer; @Autowired private ProductMapper productMapper; /** * 将要查询的商品字段存入solr * * @return */ @Override public Object insertSearchProduct() { //查询商品列表 ListproductList = productMapper.selectSearchProduct(); //把商品写入索引库 for (Product product : productList) { //创建一个SolrInputDocument对象 SolrInputDocument document = new SolrInputDocument(); document.setField("id", product.getId()); document.setField("item_title", product.getTitle()); document.setField("item_title_img", product.getTitleImg()); document.setField("item_lowest_price", product.getLowestPrice()); document.setField("item_need_number", product.getNeedNumber()); document.setField("item_spu_sales", product.getSpuSales()); //写入索引ku try { solrServer.add(document); //提交修改 solrServer.commit(); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } return TTResult.ok(); } }
写个方法测试一下添加(注意一定要提交)
能查询到说明成功