一、solr简介
solr是一个基于Lucene的Java搜索引擎服务器(是一套war程序),solr提供了层面搜索、命中醒目显示并且支持多种输出格式(XML、XSLT、JSON格式)。solr易于安装与配置,而且附带了一个基于HTTP的管理界面。solr包装并且扩展了Lucene,solr创建的索引与Lucene搜索引擎库完全兼容。
solr主要功能:
- 保存数据
- 建立索引,维护索引
- 数据检索(全文搜索、高亮显示、精确搜索)
solr依赖于 jdk1.7+ 与 Tomcat7+
二、solr服务器搭建
1、官网上下载 solr 的程序安装包(稳定版本 solr4.9.1)
http://archive.apache.org/dist/lucene/solr/
2、将 dist\solr-4.9.1.war 文件复制到 tomcat 的 webapps 目录下,并将文件命名为 solr.war
3、复制 solr解压包下example\lib\ext 下所有的jar 到tomcat 的lib目录下
4、在计算机本地新建一个文件夹solr_home(当然你可以随便起名字), 然后复制 solr-4.9.1\example\solr 下的所有文件到 solr_home下
5、启动tomcat,待tomcat启动成功后,关闭tomcat。打开tomcat的webapps目录。注意, 此时solr的war包以及被解压成solr文件夹。删除tomcat 的webapps目录下的solr的war 包,保留solr文件夹。
6、修改配置文件 apache-tomcat-7.0.67\webapps\solr\WEB-INF\web.xml
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>D:\solr_home</env-entry-value> // D:\solrhome 表示自己的solr_home文件所在路径
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
7、访问solr(http://localhost:端口号/solr/),出现solr管理界面表示成功
三、solr管理索引库
1、新建core(solr中,把配置的每一个模块叫做core),在solr_home目录下拷贝collection1文件夹,并且起名为test,打开test文件夹,修改core.properties文件,将name修改为test ,重启 tomcat ,点击左侧的下拉框(Core_Selector),出现test表示新建的 core 成功。
2、IK Analyzer中文分词器,是一个开源的,基于Java语言开发的轻量级的中文工具分词包。
- 将 IKAnalyzer2012FF_u1.jar 添加到solr的lib目录下
- 将扩展字典、停用字典、配置文件放在 D:\tomcat7-solr\webapps\solr\WEB-INF\classes 目录下
- 修改 D:\solrhome\collection1\conf 下的 schema.xml 文件,配置一个FieldType,使用 IKAnalyzer ,然后在solr管理页面点击Analysis , 在Analysis Fieldname 下拉框中选中 text_ik 下面配置的 名称 。进行测试就可以看到分词后的分词效果。
<fieldType name="text_ik" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType> |
3、配置域
域相当于数据库中的表字段,用户存放数据,用户根据业务定义相关的域(Field),域常用的属性有
- name 指定域的名称
- type 指定域的类型
- indexed 是否索引
- stored 是否存储
- required 是否必须
- multValued 是否多值
修改solrhome的schema.xml 文件 设置业务系统 Field ,其中 text_ik 是IKAnalyzer 配置好的名称。
<field name="item_goodsid" type="long" indexed="true" stored="true"/> <field name="item_title" type="text_ik" indexed="true" stored="true"/> <field name="item_price" type="double" indexed="true" stored="true"/> <field name="item_image" type="string" indexed="false" stored="true" /> <field name="item_category" type="string" indexed="true" stored="true" /> <field name="item_seller" type="text_ik" indexed="true" stored="true" /> <field name="item_brand" type="string" indexed="true" stored="true" /> |
复制域:复制域的作用在与将某一个 field 中的数据复制到另外一个 域中
<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/> <copyField source="item_title" dest="item_keywords"/> <copyField source="item_category" dest="item_keywords"/> <copyField source="item_seller" dest="item_keywords"/> <copyField source="item_brand" dest="item_keywords"/> |
动态域:当需要动态扩充字段时,就需要使用动态域。在项目《品优购》中,规格字段的值是不确定的,所以需要动态域实现其效果。
“item_spec_网络制式”:“5G”,
“item_spec_屏幕尺寸”:“6寸”,
<dynamicField name="item_spec_*" type="string" indexed="true" stored="true" /> |