solr(三)solr添加配置ik分词器及schema文件分析

接下来,整理出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中,FieldFieldType都需要先定义后使用

(1)插入的文档必须与域相匹配

域,我个人也称它为字段,它在solr中有特定的含义,就类似数据库中表的列一样,规范着写入的数据,我们先来做个例子。

 

(2)域的定义

   2.1Field

<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.3uniqueKey

指定唯一键

<uniqueKey>id</uniqueKey>

其中的id是在Field标签中已经定义好的域名,而且该域要设置为requiredtrue

一个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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值