CDH如何添加solr中文分词

发布时间:2021-12-17 09:18:52 作者:小新
来源:亿速云 阅读:367
# CDH如何添加Solr中文分词

## 前言

在Cloudera Distribution for Hadoop (CDH) 中使用Solr进行全文检索时,针对中文内容的处理需要专门的分词器支持。本文将详细介绍如何在CDH环境中为Solr配置中文分词器,包括IK Analyzer和SmartCN等常用方案的集成方法。

---

## 一、环境准备

### 1.1 确认CDH版本
```bash
# 查看CDH版本
cat /etc/default/cloudera-scm-server | grep CM_VERSION

1.2 确认Solr服务状态

# 检查Solr服务
sudo service solr-server status

1.3 所需组件下载


二、IK Analyzer集成方案

2.1 上传JAR文件

将以下文件上传到Solr节点: - ik-analyzer-*.jar - stopword.dic (可选停用词库) - IKAnalyzer.cfg.xml (配置文件)

推荐存放路径:

/opt/cloudera/parcels/CDH/lib/solr/contrib/analysis-extras/lucene-libs/

2.2 修改solrconfig.xml

<lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs/" regex="ik-analyzer-.*\.jar" />

2.3 配置schema.xml

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

2.4 重启服务

sudo service solr-server restart

三、SmartCN官方方案

3.1 启用内置插件

<fieldType name="text_smartcn" class="solr.TextField">
  <analyzer>
    <tokenizer class="org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory"/>
    <filter class="org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory"/>
  </analyzer>
</fieldType>

3.2 性能对比测试

分词器 索引速度 查询速度 内存占用
IK 中等 较高
SmartCN 中等

四、自定义词典配置

4.1 IK自定义词典

编辑IKAnalyzer.cfg.xml

<entry key="ext_dict">custom/mydict.dic</entry>
<entry key="ext_stopwords">custom/mystop.dic</entry>

4.2 热更新配置

通过API触发更新:

curl http://solr-host:8983/solr/collection_name/analysis/field?wt=json -d '
{
  "fieldType":"text_ik",
  "fieldValue":"测试新词"
}'

五、验证分词效果

5.1 使用Solr Admin界面

  1. 访问http://<solr-host>:8983/solr
  2. 选择对应collection
  3. 进入Analysis页面输入测试文本

5.2 通过API验证

curl "http://localhost:8983/solr/collection/analysis/field?analysis.fieldvalue=中华人民共和国&analysis.fieldtype=text_ik&wt=json"

预期输出应显示正确切分:

{
  "tokens": [
    {"token":"中华", "start":0, "end":2},
    {"token":"人民", "start":2, "end":4},
    {"token":"共和国", "start":4, "end":7}
  ]
}

六、性能优化建议

  1. JVM调参

    # 修改solr.in.sh
    SOLR_JAVA_MEM="-Xms4g -Xmx4g"
    
  2. 缓存配置

    <filterCache class="solr.FastLRUCache" size="512" initialSize="512" autowarmCount="0"/>
    
  3. 索引优化

    curl http://localhost:8983/solr/collection/update -H "Content-Type: text/xml" --data-binary '<optimize/>'
    

七、常见问题解决

7.1 类加载错误

java.lang.ClassNotFoundException: org.wltea.analyzer.lucene.IKTokenizerFactory

解决方案: - 确认JAR路径正确 - 检查文件权限(需solr用户可读)

7.2 分词效果不佳

7.3 内存溢出

solrconfig.xml中增加:

<indexDefaults>
  <ramBufferSizeMB>100</ramBufferSizeMB>
</indexDefaults>

结语

通过本文介绍的两种方案,用户可以根据实际需求选择适合的中文分词器。对于需要高精度分词的场景推荐IK Analyzer,而追求部署简便性的场景可选择SmartCN。建议在生产环境部署前进行充分的性能测试和词典优化。

注意:所有配置修改后都需要重启Solr服务生效,建议在维护窗口期操作。 “`

(全文约1350字)

推荐阅读:
  1. 离线部署 CDH 5.12.1 及使用 CDH 部署 Ha
  2. 中文分词软件SCWS

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

cdh solr

上一篇:怎么进行Spark和MapReduce的对比

下一篇:python匿名函数怎么创建

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》