初识solr 安装单节点solr5.5.3 配置中文分词 以及简单使用

来源:互联网 发布:apache 反向代理 tcp 编辑:程序博客网 时间:2024/05/09 07:33

今天安装了下solr,并且配置了中文分词,简单介绍了下solr web的使用,以及solr索引以及查询的步骤,中文分词的种类。

solr的javaAPI操作移步:http://blog.csdn.net/qq_20641565/article/details/55259690

  • 1.下载文件并且解压

这里我下载的是5.5.3版本,下载地址:https://mirrors.aliyun.com/apache/lucene/solr/5.5.3/solr-5.5.3.tgz

[solr@lijie ~]$ tar -xzvf solr-5.5.3.tgz
  • 2.创建数据目录和安装目录
[solr@lijie ~]$ mkdir -p ./data/solr ./solr
  • 3.安装服务
    注意:这必须用root用户执行
[root@lijie ~]$ ./solr-5.5.3/bin/install_solr_service.sh solr-5.5.3.tgz -d /home/solr/data/solr -i /home/solr/solr

但是这里报错:ERROR: /etc/init.d/solr already exists!如图:
这里写图片描述
因为之前我装过一次,服务已经存在了。

  • 4.删除之前的solr服务(如果第一次装请忽略本步骤)

查看系统服务:

[root@lijie solr]# chkconfig --list

如图:
这里写图片描述

删除之前的服务:

[root@lijie solr]# chkconfig --del solr

切换到/etc/init.d目录,删除solr文件

[root@lijie solr]# cd /etc/init.d/[root@lijie init.d]# rm -rf solr

切换到/etc/default/删除solr.in.sh

[root@lijie solr]# cd /etc/default/[root@lijie default]# rm -rf solr.in.sh

再用root执行安装服务

[solr@lijie ~]$ ./solr-5.5.3/bin/install_solr_service.sh solr-5.5.3.tgz -d /home/solr/data/solr -i /home/solr/solr

安装成功,如图:
这里写图片描述

  • 5.查看状态
[root@lijie java]# service solr status

如图:
这里写图片描述

  • 6.查看web服务

访问:http://lijie:8983/solr/#/
如图:
这里写图片描述

  • 7.切换回solr用户,创建core:
[root@lijie solr]# su solr[solr@lijie solr]$ ./bin/solr create -c lijie_test

如图:
这里写图片描述

注意:

如果这里用root用户创建core会报错,错误如下:
这里写图片描述
查看web端:
这里写图片描述
在网上查询资料说用root用户就会报错,所以创建core就切换回solr用户。
如果已经用root创建,切报错了,就可以先删除这个core,然后切换回solr用户,再重新创建core

删除core:

[root@lijie solr]# ./bin/solr delete -c lijie_test

切换回solr用户并且重新创建:

[root@lijie solr]# su solr[solr@lijie solr]$ ./bin/solr create -c lijie_testCopying configuration to new core instance directory:/data/solr/data/lijie_testCreating new core 'lijie_test' using command:http://localhost:8983/solr/admin/cores?action=CREATE&name=lijie_test&instanceDir=lijie_test{  "responseHeader":{    "status":0,    "QTime":1391},  "core":"lijie_test"}
  • 8.配置中文分词:

8.1 添加依赖:

[root@lijie lib]# cp /home/solr/solr/solr-5.5.3/contrib/analysis-extras/lucene-libs/lucene-analyzers-smartcn-5.5.3.jar /home/solr/solr/solr/server/solr-webapp/webapp/WEB-INF/lib

8.2 切换回solr用户,修改文件managed-schema配置文件,在目录/home/solr/data/solr/data/lijie_test/conf下,添加如下配置(摘抄于http://blog.csdn.net/jiangnan_sky/article/details/53089037):

<fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100">      <analyzer type="index">       <!-- 此处需要配置主要的分词类 -->        <tokenizer class="solr.SmartChineseSentenceTokenizerFactory"/>        <!--        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />        <filter class="solr.LowerCaseFilterFactory"/>        -->        <!-- 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.SmartChineseWordTokenFilterFactory"/>      </analyzer>       <analyzer type="query">      <!-- 此处配置同上 -->        <tokenizer class="solr.SmartChineseSentenceTokenizerFactory"/>            <!--        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>        <filter class="solr.LowerCaseFilterFactory"/>        -->        <filter class="solr.SmartChineseWordTokenFilterFactory"/>      </analyzer>    </fieldType>      <field name="_text_ik" type="text_ik" indexed="true" stored="true" multiValued="true"/>

8.3 重启solr

[root@lijie conf]# service solr restart

8.4 测试分词
如图:
这里写图片描述

  • 9.添加document文档

这里写图片描述

  • 10.查询solr获得结果

这里写图片描述

其中上面:
一. Request-Handler (qt) 表示请求的webservice的服务;

二. q表示查询条件:

  1. 可以指定比如 id:10001 。
  2. 使用匹配模式比如: id:1000? 或者 id:1000* ,其中?表示匹配任意一个字符,*表示匹配任意多个字符。
  3. 可以使用 and或者or多条件查询,比如id:1000* or id:10086。
  4. 可以范围查询比如查询id:[10000 TO 10086]或者id:{10000 TO 10086},这里需要注意TO必须要大些,并且[]这个是闭区间,{}这个是开区间。

三. fq表示filter query 过滤器查询,和q效果一样,只不过fq查询的信息会被缓存下来,如果后面有相同查询就会命中solr的缓存,每个过滤器都会被单独缓存,并且每个过滤器之间相当于都是使用的and操作符;

四. sort和mysql类似,可以根据某个字段排序,比如id asc或者id desc

五. start,rows类似于mysql的limit,从第几行开始,取多少条记录。

六. fl表示filter list表示你需要查询的字段,类似于mysql中select的字段,默认是查询所有的字段,这里可以指定查询的字段,比如:id,title 就只会查询出id和title

七. df表示default search field 默认查询字段,这里默认就是managed-schema文件里面copyfield的text字段,如果copyfield配置了字段拷贝,不指定key只指定value也能查询出来,否则查询不出来,例如:原本查询时用 id:10001,如果id设置copyfield,那么直接查询10001也能查询出来。

八. Raw Query Parameters表示facet.query的多查询,facet有点类似于mysql中的group by语句,这里比如查询age在23到25和26到32两个范围的数据条数,就可以使用”facet.query=age:[23 TO 25]&facet.query=age:[26 TO 32]”查询,如下图:
这里写图片描述

九. 复选框中的facet,就是类似于mysql中的group by语句,点开会显示三个可填写项目:
这里写图片描述

第一个填写项,可以填写查询的查询字段和值例如:“addr:重庆”,就会查询出addr为重庆的条数,如下
这里写图片描述

第二个填写项,可以填写查询的字段例如:“addr”,就会查询出addr相同的个数,如下
这里写图片描述

第三个填写项目,可以填写查询的前缀,用于查询前缀匹配的数据条数,使用这个填写项目需要先在facet.field填写字段名字,然后在facet.prefix填写查询前缀:例如 facet.field填写“name”,facet.prefix填写 “wang”,这样就会查询name以wang开头的一共有多少条数据
这里写图片描述

注意:用于facet的字段的索引index一定要设为true

  • 11.solr建立索引的过程和查询过程简介

solr索引过程:
第一步:solr会对句子进行空格分隔,比如对THIS is a test encoded is iso-8859-1分词,分为THIS,is,a,test,encoded,is,iso-8859-1这些词语。

第二步:solr会对上面分出来的词,去掉停用词,这里比如a,is,并且对上面的单个词进行分词,分为THIS,test,encoded,iso,8859-1(或者不分,这里只是举个例子)。

第三部:solr会对上面分出来的英文都转化为小写this,test,encoded,iso,8859-1。

solr读取过程:
第一步:solr会对句子进行空格分隔,比如对this test encoded ISO-8859-1分词,分为this,test,encoded,iso-8859-1这些词语。

第二步:同索引过程。

第三部:同索引过程,最后分词为this,test,encoded,iso,8859-1。

虽然查询时用this test encoded ISO-8859-1这句话,而索引的时候是这句话THIS is a test encoded is iso-8859-1,但是最后分词匹配成功,那么索引的那句话就会被查询出来,这里需要注意:索引和查询的分词器必须使用一样的!!!

  • 12.中文分词器

中文分词器有单个分词法,二分法,和词库法三种方式。
如果都对“今天天气真好”这个进行分词

单个分词法:今,天,天,气,真,好
二分词法:今天,天天,天气,气真,真好
词库法(还要看词库的配置):今天,天气,真好

1 0
原创粉丝点击