solr之Ik中文分析器的安装

讲过solr在windows和linux下的安装了,但是并没有安装中文分析器,这里补充吧。
安装中文分词器需要用到solrhome\collection1\conf下的schema.xml文件。所以有必要先说一下这个xml文件。

打开schema.xml后主要看到以下的几个标签:
1、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" />
        <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>

class:是solr自己封装的类型,可以根据该类型来创建数据跟查询。
analyzer表示分析器,由分词器(包括索引分词器跟查询分词器)跟过滤器组成。

2、field:业务域定义
在该标签内定义具体的业务域,注意,域的类型必须是在fieldType中定义过的name,否则添加索引的时候会报错。如:

<field name="name" type="text_general" indexed="true" stored="true"/>
   <field name="cat" type="string" indexed="true" stored="true" multiValued="true"/>

indexed:是否被索引
stored:是否被存储
multivalued:是否可存储多个值
solr其实已经帮我们定义好了很多的field,比如name,id,cat等,用不用的看就看情况了。

3、copyField:复制域
如;

<copyField source="title" dest="text"/>
<copyField source="name" dest="text"/>

这就表示会将定义好的title和name两个业务域映射(复制)到text域上,那么进行关键字查询text域中的信息的时候就相当域同时查了title和name两个域中信息,而不用进行两次查询,从而进行了统一的检索提高了效率。

其实可以想的简单一点,FieldType就好像是我们在Java中自定义类型。

Field:
Field就是一个字段,定义一个Field很简单:

<field name="price" type="long" indexed="true" stored="true"/>
基本上属性也和FieldType类似,他的属性会覆盖掉FieldType的同名属性。

CopyField:

你可能想让document的一些字段可以多次使用。solr 有一个字段复制机制,可以提交多个不同类型字段集中到一个字段。字段复制主要涉及两个概念,source和destination,一个是要复制的字段,另一个是要复制到哪个字段,以下是个例子:

<copyField source="cat" dest="text" maxChars="30000" />

上例中,如果text字段有数据的话,cat字段的内容将被添加到text字段中。maxChars 参数,一个int类型参数,用于限制复制的字符数。

source和destination都支持通配符。以下是一个将所有以 _t 结尾的字段全部复制到text字段中。

<copyField source="*_t" dest="text" maxChars="25000" />

其实说的简单一点,比如现在你要查询包涵"Java"的博客, 那么你肯定要查内容,标题是否包含Java,但是solr不能像SQL那样,where tittle like '%Java%' or content like '%Java%'. 这个时候copyField就派上用场了, 定义一个新字段,将title和content 复制到这个新字段,索引的时候,直接从这个新字段查询,这样就达到目地了。 这便是copyField的典型应用场景 。注意:如果dest由多个source构成,就需要将其指定为multiValued。
在网上找了一个例子:

<schema name="eshequn.post.db_post.0" version="1.1"  
    xmlns:xi="http://www.w3.org/2001/XInclude">  
     <fields>  
        <!-- for title -->  
        <field name="t" type="text" indexed="true" stored="false" />  
        <!-- for abstract -->  
        <field name="a" type="text" indexed="true" stored="false" />  
        <!-- for title and abstract -->  
        <field name="ta" type="text" indexed="true" stored="false" multiValued="true"/>  
    </fields>  
    <copyField source="t" dest="ta" />  
    <copyField source="a" dest="ta" />  
</schema>  

1、Linux下安装Ik中文分析器

windows就不说了会linux下的配置更会windos下的配置。

第一步:
先看一下ik分析器文件夹吧,网上能找到:

这里写图片描述

将IK Analyzer 2012FF_hf1上传到linux(我的还是放在/usr目录下的)
复制IKAnalyzer2012FF_u1.jar(这个jar的版本一定要对,否则可能和solr4.10.3不搭配)
/usr/local/solr/tomcat/webapps/solr/WEB-INF/lib(这个在介绍安装配置solr的时候创建的)下。

[root@itheima32 usr]# cd IK\ Analyzer\ 2012FF_hf1
[root@itheima32 IK Analyzer 2012FF_hf1]# 
总用量 2004
drwxr-xr-x. 5 root root    4096 6月  29 2017 doc
-rw-r--r--. 1 root root     168 6月  29 2017 ext_stopword.dic
-rw-r--r--. 1 root root 1165908 6月  29 2017 IKAnalyzer2012FF_u1.jar
-rw-r--r--. 1 root root     419 6月  29 2017 IKAnalyzer.cfg.xml
-rw-r--r--. 1 root root  841268 6月  29 2017 IKAnalyzer中文分词器V2012_FF使用手册.pdf
-rw-r--r--. 1 root root   17778 6月  29 2017 LICENSE.txt
-rw-r--r--. 1 root root      34 6月  29 2017 mydict.dic
-rw-r--r--. 1 root root     278 6月  29 2017 NOTICE.txt
[root@itheima32 IK Analyzer 2012FF_hf1]# cp IKAnalyzer2012FF_u1.jar /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib
[root@itheima32 IK Analyzer 2012FF_hf1]# cd 

第二步:
在/usr/local/solr/tomcat/webapps/solr/WEB-INF下创建classes文件夹,将扩展词典、配置文件放到solr工程的WEB-INF/classes目录下

[root@itheima32 IK Analyzer 2012FF_hf1]# cd /usr/local/solr/tomcat/webapps/solr/WEB-INF
[root@itheima32 WEB-INF]# ll
总用量 16
drwxr-xr-x. 2 root root 4096 6月  29 19:36 lib
-rw-r--r--. 1 root root 1210 12月  1 2014 weblogic.xml
-rw-r--r--. 1 root root 7044 6月  29 16:43 web.xml

2、把扩展词典、配置文件放到solr工程的WEB-INF/classes目录下。
[root@itheima32 WEB-INF]# mkdir /usr/local/solr/tomcat/webapps/solr/WEB-INF/classes
[root@itheima32 WEB-INF]# ll
总用量 20
drwxr-xr-x. 2 root root 4096 6月  29 19:38 classes
drwxr-xr-x. 2 root root 4096 6月  29 19:36 lib
-rw-r--r--. 1 root root 1210 12月  1 2014 weblogic.xml
-rw-r--r--. 1 root root 7044 6月  29 16:43 web.xml
[root@itheima32 WEB-INF]# cd /usr/IK\ Analyzer\ 2012FF_hf1
[root@itheima32 IK Analyzer 2012FF_hf1]# ll
总用量 2004
drwxr-xr-x. 5 root root    4096 6月  29 2017 doc
-rw-r--r--. 1 root root     168 6月  29 2017 ext_stopword.dic
-rw-r--r--. 1 root root 1165908 6月  29 2017 IKAnalyzer2012FF_u1.jar
-rw-r--r--. 1 root root     419 6月  29 2017 IKAnalyzer.cfg.xml
-rw-r--r--. 1 root root  841268 6月  29 2017 IKAnalyzer中文分词器V2012_FF使用手册.pdf
-rw-r--r--. 1 root root   17778 6月  29 2017 LICENSE.txt
-rw-r--r--. 1 root root      34 6月  29 2017 mydict.dic
-rw-r--r--. 1 root root     278 6月  29 2017 NOTICE.txt
[root@itheima32 IK Analyzer 2012FF_hf1]# cp ext_stopword.dic IKAnalyzer.cfg.xml mydict.dic /usr/local/solr/tomcat/webapps/solr/WEB-INF/classes
[root@itheima32 IK Analyzer 2012FF_hf1]# ll  /usr/local/solr/tomcat/webapps/solr/WEB-INF/classes
总用量 12
-rw-r--r--. 1 root root 168 6月  29 19:40 ext_stopword.dic
-rw-r--r--. 1 root root 419 6月  29 19:40 IKAnalyzer.cfg.xml
-rw-r--r--. 1 root root  34 6月  29 19:40 mydict.dic

第三步:
配置一个fieldType,指定使用IKAnalyzer(在schema.xml中编辑即可)
修改schema.xml,添加内容如下:

<fieldType name="text_ik" class="solr.TextField">
  <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

第四步:
配置业务域,需要用到中文检索的那么type要指定上面自定义的fieldType
添加如下:

<field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_sell_point" type="text_ik" indexed="true" stored="true"/>
<field name="item_price"  type="long" indexed="true" stored="true"/>
<field name="item_image" type="string" indexed="false" stored="true" />
<field name="item_category_name" type="string" indexed="true" stored="true" />

<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_sell_point" dest="item_keywords"/>
<copyField source="item_category_name" dest="item_keywords"/>

注:这个添加的copyField 是根据业务需要添加的,全文搜索时,需要用到商品标题,卖点,分类等等相关检索信息,所以这里才配置了这么几个表示商品标题,卖点,分类等的copyField 。

启动tomcat查看:


这里写图片描述

查看商品标题分析值


这里写图片描述

接下来的就是后台界面进行增删改,查(重点)的操作,以及java代码来实现增删改,查(重点)了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容