欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-18 13:54:56
...

1、使用命令创建core实例

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

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

在bin目录下执行solr create -c test ,创建一个core,默认创建出来的位置如下:
创建并配置core以及IK 分词器

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下,然后才能创建成功。
创建并配置core以及IK 分词器

创建并配置core以及IK 分词器
使用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 有可能会造成配置丢失,配置文
件所在的路径如下图:
创建并配置core以及IK 分词器

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
属性定义
创建并配置core以及IK 分词器

这里描述的只是最常用的三个元素,关于更多的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
创建并配置core以及IK 分词器

Body 请求数据如下:

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

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

创建并配置core以及IK 分词器
常用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>

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

3、IK分词器

solr 自带了一些中文分词器,比较好用的是SmartChineseAnalyzer,但是扩展性比较差
不能自定义扩展中文词库,所以这里选择使用IKAnalyzer,这是第三方的一个分词器可
以很好的扩展中文词库,IKAnalyzer 下载后解压会有如下文件:
创建并配置core以及IK 分词器

官方下载地址(需要安全上网):
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修改并拷贝配置文件

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

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 即可
创建并配置core以及IK 分词器

相关标签: 配置类 solr