【详解】Solr配置中文分词IKAnalyzer和拼音分词pinyinAnalyzer

举报
皮牙子抓饭 发表于 2025/12/23 16:45:25 2025/12/23
【摘要】 Solr配置中文分词IKAnalyzer和拼音分词pinyinAnalyzer在处理中文搜索时,合适的分词器选择对于提高搜索质量和用户体验至关重要。Apache Solr 是一个高性能的全文搜索引擎服务器,支持多种语言的文本处理,包括中文。本文将详细介绍如何在 Solr 中配置两个常用的中文分词器:IKAnalyzer 和 pinyinAnalyzer。1. 环境准备Solr 版本:本文以 ...

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

  1. 复制 JAR 文件: 将下载的 IKAnalyzer JAR 文件复制到 Solr 核心的 lib 目录下。例如,如果你的核心名为 mycore,路径可能是 solr-8.x.x/server/solr/mycore/lib/
  2. 修改 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>
  1. 重启 Solr: 修改完配置文件后,重启 Solr 服务以使更改生效。
  2. 测试分词效果: 使用 Solr 的分析页面(http://localhost:8983/solr/mycore/analysis)来测试 text_ik 字段类型的分词效果。

3. 安装 pinyinAnalyzer

3.1 下载 pinyinAnalyzer

同样,从 ​​GitHub​​ 或其他可信源下载 ​​pinyin4j​​ 的 JAR 包。

3.2 配置 Solr

  1. 复制 JAR 文件: 将下载的 pinyin4j JAR 文件复制到 Solr 核心的 lib 目录下。
  2. 修改 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>
  1. 重启 Solr: 修改完配置文件后,重启 Solr 服务以使更改生效。
  2. 测试分词效果: 使用 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
  1. 下载 IKAnalyzer
  • 访问 ​​IKAnalyzer 官方 GitHub 仓库​​ 或其他可靠的源。
  • 下载 ​​ik-analyzer-xxx.jar​​ 文件。
  1. 将 IKAnalyzer 添加到 Solr
  • 将下载的 ​​ik-analyzer-xxx.jar​​ 文件复制到 Solr 的 ​​lib​​ 目录中,例如:​​$SOLR_HOME/server/solr-webapp/webapp/WEB-INF/lib/​​。
配置 schema.xml
  1. 编辑 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​​ 表示智能分词模式。
  1. 应用新的字段类型
  • 在 ​​schema.xml​​ 中定义使用 ​​text_ik​​ 字段类型的字段,例如:
<field name="content" type="text_ik" indexed="true" stored="true"/>

2. pinyinAnalyzer 配置

​pinyinAnalyzer​​ 是一个用于将中文转换为拼音的分词器,常用于拼音搜索和排序。以下是如何在 Solr 中配置 ​​pinyinAnalyzer​​ 的步骤:

下载和安装 pinyinAnalyzer
  1. 下载 pinyinAnalyzer
  • 访问 ​​pinyin4j 官方网站​​ 或其他可靠的源。
  • 下载 ​​pinyin4j-xxx.jar​​ 文件。
  1. 将 pinyinAnalyzer 添加到 Solr
  • 将下载的 ​​pinyin4j-xxx.jar​​ 文件复制到 Solr 的 ​​lib​​ 目录中,例如:​​$SOLR_HOME/server/solr-webapp/webapp/WEB-INF/lib/​​。
配置 schema.xml
  1. 编辑 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​​:是否保留每个汉字的首字母(连在一起)。
  1. 应用新的字段类型
  • 在 ​​schema.xml​​ 中定义使用 ​​text_pinyin​​ 字段类型的字段,例如:
<field name="name" type="text_pinyin" indexed="true" stored="true"/>

重启 Solr

完成上述配置后,重启 Solr 以使配置生效:

$SOLR_HOME/bin/solr restart

通过以上步骤,你可以在 Solr 中成功配置和使用 ​​IKAnalyzer​​ 和 ​​pinyinAnalyzer​​,从而提高中文搜索的准确性和效率。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。