接下来,整理出solr添加配置ik分词器及schema文件分析,如果对于solr添加core有问题或者对于引用相关jar包有问题,可查看我的上篇——solr(二)solr添加core以及依赖包路径,下面就来进入正题~
内容:
1. Solr添加ik分词器
2. Schema.xml 文件内容分析
一:Solr配置IK分词器
1. 准备好ik分词器的jar包,可以自己编译,已经生成的
ik分词器下载地址:https://github.com/EugenePig/ik-analyzer-solr5 , 下载完之后使用maven命令, mvnpackage 即可生成jar文件,或者下载编译好的 http://pan.baidu.com/s/1o7P0846。
然后把它复制到tomcat/webapp/solr/WEB-INF/lib里面。(千万不要复制到tomcat/lib中,这样会找不到lucene的类)
2. 打开solrHome/core1/conf/managed-schema文件,在最下方,追加如下配置
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" useSmart="false"
class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<analyzer type="query" useSmart="true"
class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
IK分词
useSmart:用来制定是否使用智能分词
isMaxWordLength="false":其中isMaxWordLength是指分词的细粒度,可以分别制定index索引和query查询的分词细粒度,建议将index的isMaxWordLength设置成false
3. 启动tomcat,即可看到text_ik分词
二:Schema.xml文件
在schema.xml文件中,主要配置了solrcore的一些数据信息,包括Field和FieldType的定义等信息,在solr中,Field和FieldType都需要先定义后使用。
(1)插入的文档必须与域相匹配
域,我个人也称它为字段,它在solr中有特定的含义,就类似数据库中表的列一样,规范着写入的数据,我们先来做个例子。
(2)域的定义
(2.1)Field:
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/>
name: 指定域的名称
type: 指定域的类型,必须匹配类型,不然会报错
indexed:是否要作索引
stored:是否要存储
required:是否必填,一般只有id才会设置
multiValued:是否有多个值,如果设置为多值,里面的值就采用数组的方式来存储,比如商品图片地址(大图,中图,小图等),必须将multiValued设置为true。
(2.2)配置动态域dynamicField:
动态域
<dynamicField name="*_i" type="string" indexed="true" stored="true" multiValued="true" />
何谓动态域呢?就是这个域的名称,是由表达式组成的,只要名称满足了这个表达式,就可以用这个域
属性介绍:
Name:指定动态域的命名规则,该域的名称是通过一个表达式来指定的,只要符合这这个规则,就可以使用这个域。比如 aa_i,bb_i,13_i等等,只要满足这个表达式皆可
type:对应的值类型,相应的值必须满足这个类型,不然就会报错
indexed:是否要索引
stored:是否要存储
...其它的属性与普通的域一至
(2.3)uniqueKey:
指定唯一键
<uniqueKey>id</uniqueKey>
其中的id是在Field标签中已经定义好的域名,而且该域要设置为required为true。
一个schema.xml文件中必须有且仅有一个唯一键
(2.4)复制域 copyField:
<copyField source="cat" dest="text"/>
source:源域
dest:目标域
复制域,将源域的内容复制到目标域中
注意:目标域必须是允许多值的,如下,multiValued必须为true,因为可能多个源域对应一个目标域,所以它需要以数组来存储
<field name="text" type="string" indexed="true" stored="true" multiValued="true"/>
(2.5)域的类型 fieldType
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt"
ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
相应属性的说明
name:域的名称
class: 指定该域类型对应的solr的类型
analyzer:分词器的配置(指定分析器)
type: index(索引分词器),query(查询分词器)
tokenizer:配置指定分词器
filter:指定过滤器
schema文件分析更详细版可查看:
https://www.cnblogs.com/langfanyun/p/5829874.html