Apache Solr
是一个流行的开源搜索服务器,它通过使用类似REST的HTTP API,确保几乎任何编程语言都能来使用solr。
之所以使用solr,是因为只要是自带搜索应用的系统或页面,搜索功能往往是有着巨大资源消耗,导致请求时间大大延长。
solr是基于Lucene(全文检索系统)对其进行了扩展,提供了更加丰富的查询语句。对性能做出一定优化,且提供一个完整的功能管理页面。
lucene本质是搜索库,而solr则是独立的应用程序。
lucene专注于搜索底层的建设,solr专注于企业应用。
solr是lucene面向企业搜索应用的扩展。
solr下载路径:
https://archive.apache.org/dist/lucene/solr/
使用步骤:
1:安装 Tomcat,解压缩即可。
2:解压 solr。
3:把 solr 下的dist目录solr-4.10.3.war部署到 Tomcat\webapps下(去掉版本号)。
4:启动 Tomcat解压缩 war 包
5:把solr下example/lib/ext 目录下的所有的 jar 包,添加到 solr 的工程中(\WEB-INF\lib目录下)。
6:创建一个 solrhome 。solr 下的/example/solr 目录就是一个 solrhome。复制此目录到D盘改名为solrhome 。
7:关联 solr 及 solrhome。需要修改 solr 工程的 web.xml 文件。
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>d:\solrhome</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
8:启动 Tomcat
http://IP:8080/solr/
IK Analyzer配置
1、把IKAnalyzer2012FF_u1.jar 添加到 solr 工程的 lib 目录下
2、创建WEB-INF/classes文件夹 把扩展词典、停用词词典、配置文件放到 solr 工程的 WEB-INF/classes 目录下。(也就是ext_stopword.dic,IKAnalyzer.cfg.xml,mydict.dic)。
3、修改 Solrhome 的 schema.xml 文件,配置一个 FieldType,使用 IKAnalyzer
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
配置solr的域
name:字段名
type:字段类型
indexed:是否启用索引,true启用,false不用。主要用来查询,排序。
stored:是否被存储,存储的话会占用cpu,io,和磁盘空间。
required:是否必须。类似于数据库的非空。默认为假。
default:字段默认值。无法提供时,用默认值代替。
multiValued:是否多值,表示这个字段在一个文档中是否可以存储多个值的内容。
修改solrhome的schema.xml 文件 设置业务系统 Field
<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"/>
动态域(需要动态扩充字段时,需要使用动态域)
<dynamicField name="item_spec_*" type="string" indexed="true" stored="true" />
配置文件修改之后,必须重启Solr。