多核心的概念

多核心说白了就是多索引库。也可以理解为多个"数据库表"

说一下使用multicore的真实场景,比若说,产品搜索和会员信息搜索,不使用多核也没问题,这样带来的问题是 indexs文件很多,而且产品的索引文件和会员信息的索引文件混在一起,备份也是个问题。 如果使用了多核,那就很轻松了,产品和会员就可使用不同的URL进行提交了,业务上也很清晰,生成的索引文件也不会混在一起,也容易备份。

每个索引库通过相对独立的url访问。

多核心的配置

还记得solr home吗,既然配置多核心,那么我们可以新建一个目录作为solr home,从零开始搭建,这样理解会更深(记得在tomcat中修改solr home路径)。

我这里使用的solr home路径为:D:\Installed Applications\SolrIndex,之后将solr解压,将solr-4.9.0\example\multicore下的所有文件copy到solr home。

可以看到里面有core0和core1两个核心,和一个solr.xml。core0和core1从名字就可以看出来是两个示例核心,文件结构非常简单,就只有两个文件,schema.xml和solrconfig.xml,所以我们可以根据需要修改或新建核心,只要根据实例核心的目录结构就好。接下来是schema.xml,这个文件相当于告诉solr,有多少核心和核心的名字及核心的位置:

结构如下:

  1. <cores adminPath="/admin/cores" host="${host:}" hostPort="${jetty.port:8983}" hostContext="${hostContext:solr}">
  2.     <core name="core0" instanceDir="core0" />
  3.     <core name="core1" instanceDir="core1" />
  4.  
  5.     <shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
  6.       <str name="urlScheme">${urlScheme:}</str>
  7.     </shardHandlerFactory>
  8.   </cores>

shardHandlerFactory暂时不管,主要修改core,name是核心的名字,instanceDir是核心的路径,默认是当前目录,这个最好保持一致,即加入核心名字是core0,那么就在solr home下新建一个core0文件夹,里面放入配置文件,那么这就是一个核心。

我修改后的solr.xml配置如下:

  1. <cores adminPath="/admin/cores" host="${host:}" defaultCoreName="Artist" hostPort="${port:8983}" hostContext="${hostContext:solr}">
  2.     <core name="AritstCategory" instanceDir="AritstCategory" />
  3.     <core name="Artist" instanceDir="Artist" />
  4.    <core name="Song" instanceDir="Song" />
  5.    <core name="SongArtist" instanceDir="SongArtist" />
  6.    <core name="SongCategory" instanceDir="SongCategory" />
  7.    <core name="SongMenu" instanceDir="SongMenu" />
  8.    <core name="SpaceAudio" instanceDir="SpaceAudio" />
  9.    <core name="SpaceVideo" instanceDir="SpaceVideo" />
  10.    <core name="SpaceAVNum" instanceDir="SpaceAVNum" />
  11.  
  12.     <shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
  13.       <str name="urlScheme">${urlScheme:}</str>
  14.     </shardHandlerFactory>
  15.   </cores>

目录结构如下:

可能大家已经注意到配置有下列内容:

  1. <cores adminPath="/admin/cores" host="${host:}" defaultCoreName="Artist" hostPort="${port:8983}" hostContext="${hostContext:solr}">

AdminPath是指url路径

Host是指主机名

defaultCoreName是指默认使用的核心(不配置也完全可以)

hostPort是指访问的端口(跟tomcat的端口保持一致)

hostContext是指主机的上下文,也就是webapps中solr的项目名

其实有点像tomcat项目的配置。

多核心的访问

开启tomcat服务,访问:localhost:8983/solr

如下图所示:

即可看到多个核心。当然也可以在url上访问不同核心库:

Localhost:8983/solr/admin/coreName

刚说的defaultCoreName也就是说,如果没指定访问的核心,默认访问哪个核心的作用。

分词器简介与配置

Solr默认是没有中文分词的,其中solr默认的比较常用的数据类型有下面几种:string、long、int。详细的请看我的另外一篇博客:一、Solr综述

我用的是IK分词器,是国人做的一个开源的分词器,所以主要说下IK分词器的配置。

下载

下载 "IK Analyzer 2012FF_hf1.zip"包。 详见http://zhengchao730.iteye.com/blog/1833000

解压

解压后的目录结构:

其中已经有比较详细的文档了,但是我发现文档中并没有对solr分词器的配置有详细的说明。所以请读者继续往下看。

配置

步骤一:将 IKAnalyzer2012FF_u1.jar拷贝到目录"$TOMCAT_HOME \webapps\solr\WEB-INF\lib"中

步骤二:将IKAnalyzer.cfg.xml、stopword.dic拷贝到目录$TOMCAT_HOME \webapps\solr\WEB-INF\classes目录下,没有则新建classes目录。

步骤三:在每个核心中的schema.xml中配置IK分词器:

  1. <fieldType name="text_ik" class="solr.TextField">
  2.         <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
  3.         <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
  4.    </fieldType>

这样就可以使用ik分词器了。

其中isMaxWordLength是指分词的细粒度,可以分别制定index索引和query查询的分词细粒度,建议将index的isMaxWordLength设置为false,这样就采用最细分词,是索引更精确,查询时尽量能匹配,而将query的isMaxWordLength设置为true,采用最大分词,这样能够使查询出来的结果更符合用户的需求。

并且还有一点需要特别注意,我用的是solr4.9,所以需要把各核心schema.xml中的<schema name="example core zero" version="1.1">版本由1.1改为1.5

<schema name="example core zero" version="1.5">.

这样查询时分词才能成功,比如搜索中华人民共和国,如果不配置的话,默认是短语匹配,就只搜索文档中包含中华人民共和国的结果,但是如果配置了查询分词,那么中华、人民….都能被匹配。

IK分词器使用与测试

之后在schema.xml中配置一个field用于测试,如下:

  1. <field name="Artist_Name" type="text_ik" indexed="true" stored="true"/>

然后打开solr的admin页面:

可以看到分词之后的效果。

三、Solr多核心及分词器(IK)配置的更多相关文章

  1. Solr多核心及分词器(IK)配置

    Solr多核心及分词器(IK)配置   多核心的概念 多核心说白了就是多索引库.也可以理解为多个"数据库表" 说一下使用multicore的真实场景,比若说,产品搜索和会员信息搜索 ...

  2. 我与solr(六)--solr6.0配置中文分词器IK Analyzer

    转自:http://blog.csdn.net/linzhiqiang0316/article/details/51554217,表示感谢. 由于前面没有设置分词器,以至于查询的结果出入比较大,并且无 ...

  3. 转:solr6.0配置中文分词器IK Analyzer

    solr6.0中进行中文分词器IK Analyzer的配置和solr低版本中最大不同点在于IK Analyzer中jar包的引用.一般的IK分词jar包都是不能用的,因为IK分词中传统的jar不支持s ...

  4. 如何在Elasticsearch中安装中文分词器(IK)和拼音分词器?

    声明:我使用的Elasticsearch的版本是5.4.0,安装分词器前请先安装maven 一:安装maven https://github.com/apache/maven 说明: 安装maven需 ...

  5. 沉淀再出发:ElasticSearch的中文分词器ik

    沉淀再出发:ElasticSearch的中文分词器ik 一.前言   为什么要在elasticsearch中要使用ik这样的中文分词呢,那是因为es提供的分词是英文分词,对于中文的分词就做的非常不好了 ...

  6. ElasticSearch搜索引擎安装配置中文分词器IK插件

    近几篇ElasticSearch系列: 1.阿里云服务器Linux系统安装配置ElasticSearch搜索引擎 2.Linux系统中ElasticSearch搜索引擎安装配置Head插件 3.Ela ...

  7. 如何给Elasticsearch安装中文分词器IK

    安装Elasticsearch安装中文分词器IK的步骤: 1. 停止elasticsearch 2.2的服务 2. 在以下地址下载对应的elasticsearch-analysis-ik插件安装包(版 ...

  8. Solr安装中文分词器IK

    安装环境 jdk1.7 solr-4.10.3.tgz KAnalyzer2012FF_u1.jar tomcat7 VM虚拟机redhat6.5-x64:192.168.1.201 Xshell4 ...

  9. Solr 配置中文分词器 IK

    1. 下载或者编译 IK 分词器的 jar 包文件,然后放入 ...\apache-tomcat-8.5.16\webapps\solr\WEB-INF\lib\ 这个 lib 文件目录下: IK 分 ...

随机推荐

  1. Svg操作

    SVG文件的JavaScript操作 获取SVG DOM 如果使用img标签插入SVG文件,则无法获取SVG DOM.使用object.iframe.embed标签,可以获取SVG DOM. var ...

  2. Jquery+css实现图片无缝滚动轮播

    Today,在XX学院的教学视频中,偶尔看到了Jquery+css实现图片无缝滚动轮播视频教程,虽然以前已写过类似的,但是我感觉他学的比较精简.为了方便以后做项目时直接拷贝,特地写出来,顺便和大家分享 ...

  3. CSS3中的transform变形

    在CSS3中,用Transform功能可以实现文字或图像的旋转.缩放.倾斜.移动这四种类型的变形,这四种变形分别使用rotate.scale.skew和translate这四种方法来实现.将这四种变形 ...

  4. mysql_fetch_assoc() ,mysql_fetch_array() , mysql_fetch_row()的区别

    1. mysql_fetch_assoc() 函数从结果集中取得一行作为关联数组. 返回根据从结果集取得的行生成的关联数组,如果没有更多行,则返回 false. 输出: Array ( [LastNa ...

  5. 以下是jQuery和JavaScript实现相同操作的等价代码。

    选择元素  Javascript代码 1.// jQuery   2.var els = $('.el');   3.  4.// 原生方法   5.var els = document.queryS ...

  6. 在QT中使用Irrlicht引擎的方法与步骤

      Ø 相关库,插件安装部分 本篇文档介绍在Qt5.2.0下面使用lrrlicht引擎在Qt窗口中输出(开发环境:vs2012) 1. 首先安装好Qt5.2.0,下载地址: http://downlo ...

  7. 前端要怎么学createjs!!!???

    前端想做js开发,可以.但是思维要变通,思维要重塑.为啥?因为被div+css坑的有点深.这些都是我自己总结的,不知道其他人是不是这样. 在我看来div+css算是开发吗?肯定不是,这些东西有难的东西 ...

  8. 转载:解决linux ping: unknown host www.baidu.com

    解决linux ping: unknown host www.baidu.com 转载网址:http://www.kankanews.com/ICkengine/archives/48417.shtm ...

  9. 【结构型】Proxy模式

    代理模式是指为其他对象提供代理来控制对象的访问.这种手段有时候可以给我们带来许多好处.如:通过代理可以实现异步响应处理:通过代理可以起到保护或限制对象的使用的作用,从而提高安全性. 在设计上,用户使用 ...

  10. 使用django+mysql+scrapy制作的一个小说网站

    小说网站用的程序都是千篇一律的,jieqi + guanguang,无聊时间学习python+django,也做了一个小说网站,下面说一说做这个网站一些过程, 制作这种采集站,最要紧的是要有一个好的采 ...