前言
使用传统的数据库查询方式实现搜索无法满足一些高级需求,比如:搜索速度要快、搜索结果按相关度排序、搜索内容不固定,一般可以单独使用Lucene或者使用google或者百度接口或者使用solr实现全文检索。而solr是基于lucene,是一个服务器,在各方面都相对优越
redis环境搭建
有如下步骤
1.上传solr压缩包solr-4.10.3.tgz.tar到linux上
2.解压到/usr/local下,tar -zxvf solr-4.10.3.tgz.tar -C /usr/local/
3.进入目录: cd solr-4.10.3/example/webapps/
4.拷贝其下的war文件到tomcat的webapps中:cp solr.war /usr/local/tomcat/webapps/(tomcat启动,自动解压war包)
5.进入solr文件,修改其中一些文件: vim solr/WEB-INF/web.xml 找到nv-entry内容,解开注释,并修改solr/home的地址:我的是/usr/local/solr-4.10.3/example/solr
6.拷贝相关jar包到tomcat下 cd /usr/local/solr-4.10.3/example/lib/ext && cp * /usr/local/tomcat/lib/
7.重启tomcat
然后通过浏览器访问,如看到下面的solr主页即可
至此我们可以通过可视化页面对数据进行增删改查操作,其中solr是以id为标识的,并且根据不同的分词器进行分词,而索引字段是在服务器配置文件中已定义好的(可自定义)
相关文件说明
solrhome:目录中包括了运行solr实例的所有的配置文件和数据文件,是运行的主目录,可包括多个solrcore
solrcore:提供单独的搜索和索引服务
如可视化界面中的collection1
solr索引
schema.xml,在solrcore的conf目录下,它是solr数据表配置文件,它定义了加入索引的数据的数据类型。主要包括FiledTypes、Filed和其他的一些缺省设置
FieldType域类型
text_general是solr默认的域类型
子节点
name:是这个FieldType的名称
class:是Solr提供的包solr.TextField,solr.TextField
允许用户通过分析器来定制索引和查询,分析器包括一个分词器(tokenizer)
和多个过滤器(filter)
positionIncrementGap:可选属性,定义在同一个文档中此类型数据的空白
间隔,避免短语匹配错误,此值相当于Lucene的短语查询设置slop值,根据经
验设置为100。
在FieldType定义的时候最重要的就是定义这个类型的数据在建立索引和进
行查询的时候要使用的分析器analyzer,包括分词和过滤
索引分析器中:使用solr.StandardTokenizerFactory标准分词器,solr.StopFilte
rFactory停用词过滤器,solr.LowerCaseFilterFactory小写过滤器。
搜索分析器中:使用solr.StandardTokenizerFactory标准分词器,solr.StopFilte
rFactory停用词过滤器,这里还用到了solr.SynonymFilterFactory同义词过滤器
Field定义
在fields结点内定义具体的Field,filed定义包括name,type(为之前定义过的
各种FieldType),indexed(是否被索引),stored(是否被储存),multiValued(
是否存储多个值)等属性。
如下:
multiValued:该Field如果要存储多个值时设置为true,solr允许一个Field存
储多个值,比如存储一个用户的好友id(多个),商品的图片(多个,大图和
小图),通过使用solr查询要看出返回给客户端是数组
uniqueKey
Solr中默认定义唯一主键key为id域,如下:
Solr在删除、更新索引时使用id域进行判断,也可以自定义唯一主键
copyField复制域
copyField复制域,可以将多个Field复制到一个Field中,以便进行统一的检索
dynamicField(动态字段)
动态字段就是不用指定具体的名称,只要定义字段名称的规则,例如定义
一个dynamicField,name
为*_i,定义它的type为text,那么在使用这个字段的时候,任何以_i结尾的字段
都被认为是符合这个定义的,例如:name_i,gender_i,school_i等
配置中文分词器
具体步骤如下
1.下载并解压IKAnalyzer
2.将IKAnalyzer2012FF_u1.jar拷贝到Tomcat的webapps/solr/WEB-INF/lib 下。
3在Tomcat的webapps/solr/WEB-INF/下创建classes目录
4.将IKAnalyzer.cfg.xml、ext_stopword.dic mydict.dic copy到Tomcat的webapps/solr/WEB-INF/classes
5.修改solr core的schema文件添加FieldType:
6.重启tomcat
这样配置后,中文分词就会有很好的分词效果