Solr是一款独立的全文搜索引擎服务,它依赖servlet容器,主要作用是进行全文检索。
我理解的solr使用,分为两部分,一部分是服务端的配置,一部分是客户端的代码编写。
一、首先是服务端的配置。
第一步:
1.将solr.war包解压到tomcat的webapps目录下,然后配置日志输出,便于帮助我们排查错误
2.把solr-4.10.3\example\lib\ext目录下的所有的jar包,复制到我们已解压的solr工程WEB-INF/lib中
3. 把solr-4.10.3\example\resources目录下的配置文件,到复制我们已解压的solr工程WEB-INF/classes中。(classes目录需要我们创建)
第二步:配置solrHome和solrcore。
1. 创建一个solrhome(存放solr所有配置文件的一个文件夹)。\solr-4.10.3\example\solr目录就是一个标准的solrhome。
2. 把\solr-4.10.3\example\solr文件夹复制到C:\路径下,改名为solrhome,改名不是必须的,是为了便于理解。
3. 在solrhome下有一个文件夹叫做collection1这就是一个solrcore。就是一个solr的实例。一个solrcore相当于mysql中一个数据库实例。Solrcore之间是相互隔离。
第三步:告诉solr服务器配置文件也就是solrHome的位置。修改web.xml使用jndi的方式告诉solr服务器。
第四步:启动tomcat
第五步:访问http://localhost:9090/solr/
这就是服务端运行部分的配置。
接下来再解释下
SolrHome与SolrCore区别说明。
SolrCoreàSolr运行实例就是SolrCore,一个SolrHome可以包括多个SolrCore(Solr实例),每个SolrCore提供单独的搜索和索引服务,SolrCore名称不固定,可自己定义。
一句话描述:SolrHome相当于数据库的服务,SolrCore相当于数据库的实例。
schema.xml是配置相关域所在的配置文件
solrconfig.xml 是配置处理相关索引库位置及第三方jar的依赖位置的配置文件。如果使用默认配置可以不用做任何修改。
Xml的配置信息:
lib:solr服务依赖的扩展包,默认的路径是collection1\lib文件夹,如果没有 就创建一个
dataDir:配置了索引库的存放路径。默认路径是collection1\data文件夹,如 果没有data文件夹,会自动创建。
配置中文分词器
schema.xml,在SolrCore的conf目录下,它是Solr数据表配置文件,它定义了加入索引的数据的数据类型的。主要包括FieldTypes、Fields和其他的一些缺省设置。
在fields结点内定义具体的Field,filed定义包括name,type(为之前定义过的各种FieldType),indexed(是否被索引),stored(是否被储存),multiValued(是否存储多个值)等属性。
如下:
<field name="name" type="text_general" indexed="true" stored="true"/>
<field name="features" type="text_general" indexed="true" stored="true" multiValued="true"/>
multiValued:该Field如果要存储多个值时设置为true,solr允许一个Field存储多个值,比如存储一个用户的好友id(多个),商品的图片(多个,大图和小图),通过使用solr查询要看出返回给客户端是数组:
FieldType子结点包括:name,class,positionIncrementGap等一些参数:
name:是这个FieldType的名称
class:是Solr提供的包solr.TextField,solr.TextField 允许用户通过分析器来定制索引和查询,分析器包括一个分词器(tokenizer)和多个过滤器(filter)
positionIncrementGap:可选属性,定义在同一个文档中此类型数据的空白间隔,避免短语匹配错误,此值相当于Lucene的短语查询设置slop值,根据经验设置为100。
在FieldType定义的时候最重要的就是定义这个类型的数据在建立索引和进行查询的时候要使用的分析器analyzer,包括分词和过滤
索引分析器中:使用solr.StandardTokenizerFactory标准分词器,solr.StopFilterFactory停用词过滤器,solr.LowerCaseFilterFactory小写过滤器。
搜索分析器中:使用solr.StandardTokenizerFactory标准分词器,solr.StopFilterFactory停用词过滤器,这里还用到了solr.SynonymFilterFactory同义词过滤器。
uniqueKey
Solr中默认定义唯一主键key为id域,如下:
Solr在删除、更新索引时使用id域进行判断,也可以自定义唯一主键。
注意在创建索引时必须指定唯一约束。
了解了上面的知识就可以继续对服务端进行配置了。
这部分就是对业务域的配置。
先讲主要的域配置。
copyField复制域,可以将多个Field复制到一个Field中,以便进行统一的检索:
配置了copyfiled相当于 text:查询 等价于
title:查询 OR author:查询 OR descrption:查询。。。。
目标域text :必须是多值的.
dynamicField(动态字段)
动态字段就是不用指定具体的名称,只要定义字段名称的规则,例如定义一个 dynamicField,name 为*_i,定义它的type为text,那么在使用这个字段的时候,任何以_i结尾的字段都被认为是符合这个定义的,例如:name_i,gender_i,school_i等
设置业务系统Field
<field name="product_name" type="text_ik" indexed="true" stored="true"/>
<field name="product_price" type="float" indexed="true" stored="true"/>
<field name="product_description" type="text_ik" indexed="true" stored="false" />
<field name="product_picture" type="string" indexed="false" stored="true" />
<field name="product_catalog_name" type="string" indexed="true" stored="true" />
<field name="product_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="product_name" dest="product_keywords"/>
<copyField source="product_description" dest="product_keywords"/>
这配置实在实在太麻烦了,自己对solr又不了解,写的也没逻辑,大部分都是复制粘贴的。以后一定重写solr配置的文章。
2018年5月2日23:58:08
碎觉。!!