创建并配置core以及IK 分词器

1、使用命令创建core实例

1-1、core的创建方式有很多种,以下列出两种比较方便的:

1-1-1、使用命令创建:

在bin目录下执行solr create -c test ,创建一个core,默认创建出来的位置如下:
在这里插入图片描述

1-1-2、使用管理员页面创建core实例

需要先在D:\solr-8.7.0\server\solr下创建test文件夹及在test文件夹下创建data文件夹,找到D:\solr-8.7.0\server\solr\configsets_default 文件夹把conf文件夹拷贝到test下,然后才能创建成功。
在这里插入图片描述

在这里插入图片描述
使用tomcat 启动方式,创建的core 放在solrhome 下,同样需要拷贝conf 文件夹
1.4.低版本需要修改solrconfig.xml

<lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/clustering/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-clustering-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
修改为相对路径:
<lib dir="../../contrib/extraction/lib" regex=".*\.jar" />
<lib dir="../../dist/" regex="solr-cell-\d.*\.jar" />
<lib dir="../../contrib/clustering/lib/" regex=".*\.jar" />
<lib dir="../../dist/" regex="solr-clustering-\d.*\.jar" />
<lib dir="../../contrib/langid/lib/" regex=".*\.jar" />
<lib dir="../../dist/" regex="solr-langid-\d.*\.jar" />
<lib dir="../../contrib/velocity/lib" regex=".*\.jar" />
<lib dir="../../dist/" regex="solr-velocity-\d.*\.jar" />

2、配置schema

schema 是用来告诉solr 如何建立索引的, schema 配置文件决定着solr 如何建立索引,
每个字段的数据类型,分词方式等,老版本的schema 配置文件的名为schema.xml 使用
手工编辑。但是现在新版本的schema 配置文件的名为managed-schema,配置方式不再
是用手工编辑而是使用schemaAPI 来配置,官方给出的解释是使用schemaAPI 修改
managed-schema 内容后不需要重新加载core 或者重启solr 更适合在生产环境下维护,
如果使用手工编辑的方式更改配置不进行重加载core 有可能会造成配置丢失,配置文
件所在的路径如下图:
在这里插入图片描述

2-1、schema 主要成员

fieldType
为field 定义类型,字段类型定义了Solr 如何解析字段数据并将数据检索出来
Analyzer
是fieldType 下的子元素,分词器,由一组tokenizer 和filter 组成,如下图所示

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
      <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.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
        <filter class="solr.FlattenGraphFilterFactory"/>
        -->
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

Field
是创建索引用的字段,如果想要这个字段生成索引需要配置他的indexed 属性为true,
stored 属性为true 表示存储该索引。如下图所示每个field 都要引用一种fieldType 由type
属性定义
在这里插入图片描述

这里描述的只是最常用的三个元素,关于更多的schema的介绍请参考:https://lucene.apache.org/solr/guide/8_6/documents-fields-and-schema-design.html

2-2 Schema API

Schema API 其实就是用post 请求向solr 服务器发送携带json 参数的请求,所有操作内
容都封装在json 中,如果是linux 系统直接使用curl 工具,如果是windows 系统推荐使
用Postman
Postman 工具下载:https://www.postman.com/downloads/
POST 请求路径(Solr单独运行方式):http://localhost:8888/solr/test/schema
POST 请求路径(tomcat运行的方式):http://localhost:8080/solr/test/schema
在这里插入图片描述

Body 请求数据如下:

{
	"add-field":{
	"name":"测试数据",
	"type":"string",
	"stored":true
	}
}

添加之后,在D:\solrhome\test\conf 下查看managed-schema 文件发现多了一个field:

在这里插入图片描述
常用API:
add-field:添加field
delete-field: 删除field
replace-field: 替换field
更多API 参考http://lucene.apache.org/solr/guide/8_6/schema-api.html
也可以手工修改或者使用solr 管理界面添加。

注意如果使用solr7.5 会报异常:
java.lang.ClassNotFoundException: solr.KoreanTokenizerFactory
需要把D:\solrhome\test\conf 下的 managed-shema 文件中和Korean 有关的配置都删除:

<tokenizer class="solr.KoreanTokenizerFactory" decompoundMode="discard" outputUnknownUnigrams="false"/>
	<dynamicField name="*_txt_ko" type="text_ko" indexed="true" stored="true"/>
	<fieldType name="text_ko" class="solr.TextField" positionIncrementGap="100">
	<analyzer>
	<tokenizer class="solr.KoreanTokenizerFactory" decompoundMode="discard" outputUnknownUnigrams="false"/>
	<filter class="solr.KoreanPartOfSpeechStopFilterFactory" />
	<filter class="solr.KoreanReadingFormFilterFactory" />
	<filter class="solr.LowerCaseFilterFactory" />
</analyzer>

在这里插入图片描述

3、IK分词器

solr 自带了一些中文分词器,比较好用的是SmartChineseAnalyzer,但是扩展性比较差
不能自定义扩展中文词库,所以这里选择使用IKAnalyzer,这是第三方的一个分词器可
以很好的扩展中文词库,IKAnalyzer 下载后解压会有如下文件:
在这里插入图片描述

官方下载地址(需要安全上网):
https://code.google.com/archive/p/ik-analyzer/downloads
网盘下载地址:
链接:https://pan.baidu.com/s/1gSWVcrNL4n2j6oYZS5M0pg
提取码:65nj

3-1.拷贝jar 包

把核心jar 文件IKAnalyzer2012_u6.jar 复制到solr WEB 应用的lib 文件夹下,
D:\solr-7.4.0\server\solr-webapp\webapp\WEB-INF\lib 下或者如果部署到了tomcat 下,则
拷贝到D:\Tomcat 9.0\webapps\solr\WEB-INF\lib 下

使用自带的IKAnalyzer2012_u6.jar容易报异常:
SolrCore Initialization Failures
test: org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Could not load conf for core test: Can’t load schema d:\solrhome\test\conf\managed-schema: Plugin init failure for [schema.xml] fieldType “text_ik”: Plugin init failure for [schema.xml] analyzer/tokenizer: Error loading class ‘org.wltea.analyzer.lucene.IKTokenizerFactory’
Please check your logs for more information

可以换成压缩包里面的ik-analyzer-solr7x.jar,

3-2修改并拷贝配置文件

在这里插入图片描述
配置文件中指定了扩展词库和停词词库,多个dic 文件用分号隔开,使用UTF-8 无bom
格式打开编辑
把配置文件和词库等文件复制到WEB 应用的classes 文件夹下,如果子WEB-INF 下没有这
个文件夹自己创建即可:
在这里插入图片描述

3-3、应用分词器

在Schema 中应用分词器,在D:\solrhome\test\conf文件夹下的managed-schema 文件中加入如下代码:

<fieldType name="text_ik" class="solr.TextField">
	<analyzer type="index">
	<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false"/>
	</analyzer>
	<analyzer type="query">
	<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false"/>
	</analyzer>
</fieldType>

IKAnalyzer 的默认分词模式为细粒度分词,如果使用智能分词,则useSmart 设为true。
定义了一个text_ik 这个字段类型并采用Ik 分词器,接下来在field 元素定义式指定
type=text_ik 就可以把这个分词器应用在这个field 中。

3-4、测试分词效果

配置后重启solr 服务, solr restart –p 端口号
如果是tomcat 方式,则直接重启tomcat 即可
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

缌唸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值