【详解】Solr配置中文分词IKAnalyzer和拼音分词pinyinAnalyzer
Solr配置中文分词IKAnalyzer和拼音分词pinyinAnalyzer
在处理中文搜索时,合适的分词器选择对于提高搜索质量和用户体验至关重要。Apache Solr 是一个高性能的全文搜索引擎服务器,支持多种语言的文本处理,包括中文。本文将详细介绍如何在 Solr 中配置两个常用的中文分词器:IKAnalyzer 和 pinyinAnalyzer。
1. 环境准备
- Solr 版本:本文以 Solr 8.x 为例。
- Java 版本:确保安装了 JDK 8 或更高版本。
- 操作系统:本文示例基于 Linux 操作系统,但配置过程在 Windows 上也基本相同。
2. 安装 IKAnalyzer
2.1 下载 IKAnalyzer
首先,需要从 GitHub 或其他可信源下载最新版本的 IKAnalyzer 相关 JAR 包。
2.2 配置 Solr
- 复制 JAR 文件: 将下载的
IKAnalyzerJAR 文件复制到 Solr 核心的lib目录下。例如,如果你的核心名为mycore,路径可能是solr-8.x.x/server/solr/mycore/lib/。 - 修改 schema.xml: 打开
solr-8.x.x/server/solr/mycore/conf/schema.xml文件,添加以下内容:
< 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="true"/>
</analyzer>
</fieldType>
- 重启 Solr: 修改完配置文件后,重启 Solr 服务以使更改生效。
- 测试分词效果: 使用 Solr 的分析页面(
http://localhost:8983/solr/mycore/analysis)来测试text_ik字段类型的分词效果。
3. 安装 pinyinAnalyzer
3.1 下载 pinyinAnalyzer
同样,从 GitHub 或其他可信源下载 pinyin4j 的 JAR 包。
3.2 配置 Solr
- 复制 JAR 文件: 将下载的
pinyin4jJAR 文件复制到 Solr 核心的lib目录下。 - 修改 schema.xml: 打开
solr-8.x.x/server/solr/mycore/conf/schema.xml文件,添加以下内容:
< fieldType name="text_pinyin" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="com.chenlb.mmseg4j.solr.MMsegTokenizerFactory" mode="complex"/>
<filter class="com.github.benmanes.caffeine.cache.SolrPinyinFilterFactory"
keepFirstPinyin="false" keepFullPinyin="true" keepNonePinyinWord="true"
keepOriginalWord="true" nonePinyinWordReplacement="" />
</analyzer>
</fieldType>
- 重启 Solr: 修改完配置文件后,重启 Solr 服务以使更改生效。
- 测试分词效果: 使用 Solr 的分析页面(
http://localhost:8983/solr/mycore/analysis)来测试text_pinyin字段类型的分词效果。
4. 结合使用 IKAnalyzer 和 pinyinAnalyzer
为了同时利用 IKAnalyzer 的分词能力和 pinyinAnalyzer 的拼音转换功能,可以在 schema.xml 中定义一个新的字段类型,结合两者的优势:
<fieldType name="text_ik_pinyin" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false"/>
<filter class="com.github.benmanes.caffeine.cache.SolrPinyinFilterFactory"
keepFirstPinyin="false" keepFullPinyin="true" keepNonePinyinWord="true"
keepOriginalWord="true" nonePinyinWordReplacement="" />
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true"/>
<filter class="com.github.benmanes.caffeine.cache.SolrPinyinFilterFactory"
keepFirstPinyin="false" keepFullPinyin="true" keepNonePinyinWord="true"
keepOriginalWord="true" nonePinyinWordReplacement="" />
</analyzer>
</fieldType>

在使用Apache Solr进行全文搜索时,为了支持中文分词和拼音分词,通常会配置IKAnalyzer和PinyinAnalyzer。以下是如何在Solr中配置这两个分析器的示例代码。
1. 配置IKAnalyzer
首先,确保你已经下载了IKAnalyzer的jar包,并将其放置在Solr的lib目录下。然后,在solrconfig.xml文件中添加对IKAnalyzer的支持。
solrconfig.xml
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-analysis-extras-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lib/" regex=".*\.jar" />
<requestHandler name="/update" class="solr.UpdateRequestHandler">
<lst name="defaults">
<str name="update.chain">ik</str>
</lst>
</requestHandler>
<searchComponent name="query" class="solr.QueryComponent">
<lst name="defaults">
<str name="df">content</str>
</lst>
</searchComponent>
<schemaFactory class="ManagedIndexSchemaFactory">
<lst name="managedSchemaResourceName">
<str name="name">managed-schema</str>
</lst>
</schemaFactory>
<updateProcessor class="org.apache.solr.update.processor.AnalysisErrorHandlingUpdateProcessorFactory" name="ik">
<lst name="defaults">
<str name="errorHandler">ignore</str>
</lst>
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true"/>
</analyzer>
</updateProcessor>
schema.xml
在schema.xml文件中定义字段类型和字段,使用IKAnalyzer进行分词。
<fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true"/>
</analyzer>
</fieldType>
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="content" type="text_ik" indexed="true" stored="true" multiValued="false" />
2. 配置PinyinAnalyzer
同样,确保你已经下载了PinyinAnalyzer的jar包,并将其放置在Solr的lib目录下。然后,在solrconfig.xml文件中添加对PinyinAnalyzer的支持。
solrconfig.xml
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-analysis-extras-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lib/" regex=".*\.jar" />
<requestHandler name="/update" class="solr.UpdateRequestHandler">
<lst name="defaults">
<str name="update.chain">pinyin</str>
</lst>
</requestHandler>
<searchComponent name="query" class="solr.QueryComponent">
<lst name="defaults">
<str name="df">content_pinyin</str>
</lst>
</searchComponent>
<schemaFactory class="ManagedIndexSchemaFactory">
<lst name="managedSchemaResourceName">
<str name="name">managed-schema</str>
</lst>
</schemaFactory>
<updateProcessor class="org.apache.solr.update.processor.AnalysisErrorHandlingUpdateProcessorFactory" name="pinyin">
<lst name="defaults">
<str name="errorHandler">ignore</str>
</lst>
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.pinyin.PinyinTokenizerFactory" keepFirstPinyin="true" keepFullPinyin="true" keepNonePinyin="true" keepOriginal="true" limitFirstPinyinLength="8" />
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.pinyin.PinyinTokenizerFactory" keepFirstPinyin="true" keepFullPinyin="true" keepNonePinyin="true" keepOriginal="true" limitFirstPinyinLength="8" />
</analyzer>
</updateProcessor>
schema.xml
在schema.xml文件中定义字段类型和字段,使用PinyinAnalyzer进行分词。
<fieldType name="text_pinyin" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.pinyin.PinyinTokenizerFactory" keepFirstPinyin="true" keepFullPinyin="true" keepNonePinyin="true" keepOriginal="true" limitFirstPinyinLength="8" />
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.pinyin.PinyinTokenizerFactory" keepFirstPinyin="true" keepFullPinyin="true" keepNonePinyin="true" keepOriginal="true" limitFirstPinyinLength="8" />
</analyzer>
</fieldType>
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="content_pinyin" type="text_pinyin" indexed="true" stored="true" multiValued="false" />
3. 重启Solr
完成上述配置后,重启Solr服务以使配置生效。
4. 测试
你可以通过Solr的管理界面或API来测试分词效果。例如,使用以下命令索引一些文档:
curl 'http://localhost:8983/solr/your_core_name/update?commit=true' -H 'Content-type:application/json' -d '
[
{"id": "1", "content": "中文分词测试"},
{"id": "2", "content_pinyin": "zhong wen fen ci ce shi"}
]'
然后查询这些文档,验证分词是否按预期工作:
curl 'http://localhost:8983/solr/your_core_name/select?q=content:中文分词'
curl 'http://localhost:8983/solr/your_core_name/select?q=content_pinyin:zhong wen'
在处理中文搜索时,通常需要使用专门的中文分词器来提高搜索的准确性和效率。IKAnalyzer 和 pinyinAnalyzer 是两个常用的中文分词器。
1. IKAnalyzer 配置
IKAnalyzer 是一个开源的、基于Java的中文分词器,它提供了标准分词和智能分词两种模式。以下是如何在 Solr 中配置 IKAnalyzer 的步骤:
下载和安装 IKAnalyzer
- 下载 IKAnalyzer:
- 访问 IKAnalyzer 官方 GitHub 仓库 或其他可靠的源。
- 下载
ik-analyzer-xxx.jar 文件。
- 将 IKAnalyzer 添加到 Solr:
- 将下载的
ik-analyzer-xxx.jar 文件复制到 Solr 的 lib 目录中,例如:$SOLR_HOME/server/solr-webapp/webapp/WEB-INF/lib/。
配置 schema.xml
- 编辑
schema.xml 文件:
- 打开
schema.xml 文件,通常位于 $SOLR_HOME/server/solr/configsets/_default/conf/ 目录下。 - 添加
IKAnalyzer 的定义:
<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="true"/>
</analyzer>
</fieldType>
useSmart 参数用于控制分词模式:
-
false 表示标准分词模式。 -
true 表示智能分词模式。
- 应用新的字段类型:
- 在
schema.xml 中定义使用 text_ik 字段类型的字段,例如:
<field name="content" type="text_ik" indexed="true" stored="true"/>
2. pinyinAnalyzer 配置
pinyinAnalyzer 是一个用于将中文转换为拼音的分词器,常用于拼音搜索和排序。以下是如何在 Solr 中配置 pinyinAnalyzer 的步骤:
下载和安装 pinyinAnalyzer
- 下载 pinyinAnalyzer:
- 访问 pinyin4j 官方网站 或其他可靠的源。
- 下载
pinyin4j-xxx.jar 文件。
- 将 pinyinAnalyzer 添加到 Solr:
- 将下载的
pinyin4j-xxx.jar 文件复制到 Solr 的 lib 目录中,例如:$SOLR_HOME/server/solr-webapp/webapp/WEB-INF/lib/。
配置 schema.xml
- 编辑
schema.xml 文件:
- 打开
schema.xml 文件,通常位于 $SOLR_HOME/server/solr/configsets/_default/conf/ 目录下。 - 添加
pinyinAnalyzer 的定义:
<fieldType name="text_pinyin" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="com.github.lzj960515.pinyin4solr.PinyinFilterFactory" keepFirstPinyin="true" keepFullPinyin="true" keepNonePinyinWord="true" keepOriginalWord="true" keepSeparateFirstLetter="true" keepJointFirstLetter="true"/>
</analyzer>
</fieldType>
-
keepFirstPinyin:是否保留每个汉字的首拼音。 -
keepFullPinyin:是否保留每个汉字的全拼音。 -
keepNonePinyinWord:是否保留非拼音词。 -
keepOriginalWord:是否保留原始词。 -
keepSeparateFirstLetter:是否保留每个汉字的首字母(分开)。 -
keepJointFirstLetter:是否保留每个汉字的首字母(连在一起)。
- 应用新的字段类型:
- 在
schema.xml 中定义使用 text_pinyin 字段类型的字段,例如:
<field name="name" type="text_pinyin" indexed="true" stored="true"/>
重启 Solr
完成上述配置后,重启 Solr 以使配置生效:
$SOLR_HOME/bin/solr restart
通过以上步骤,你可以在 Solr 中成功配置和使用 IKAnalyzer 和 pinyinAnalyzer,从而提高中文搜索的准确性和效率。
- 点赞
- 收藏
- 关注作者
评论(0)