# 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
# 檢查Solr服務
sudo service solr-server status
將以下文件上傳到Solr節點:
- ik-analyzer-*.jar
- stopword.dic (可選停用詞庫)
- IKAnalyzer.cfg.xml (配置文件)
推薦存放路徑:
/opt/cloudera/parcels/CDH/lib/solr/contrib/analysis-extras/lucene-libs/
<lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs/" regex="ik-analyzer-.*\.jar" />
<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>
sudo service solr-server restart
<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>
| 分詞器 | 索引速度 | 查詢速度 | 內存占用 |
|---|---|---|---|
| IK | 中等 | 快 | 較高 |
| SmartCN | 快 | 中等 | 低 |
編輯IKAnalyzer.cfg.xml:
<entry key="ext_dict">custom/mydict.dic</entry>
<entry key="ext_stopwords">custom/mystop.dic</entry>
通過API觸發更新:
curl http://solr-host:8983/solr/collection_name/analysis/field?wt=json -d '
{
"fieldType":"text_ik",
"fieldValue":"測試新詞"
}'
http://<solr-host>:8983/solrcurl "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}
]
}
JVM調參:
# 修改solr.in.sh
SOLR_JAVA_MEM="-Xms4g -Xmx4g"
緩存配置:
<filterCache class="solr.FastLRUCache" size="512" initialSize="512" autowarmCount="0"/>
索引優化:
curl http://localhost:8983/solr/collection/update -H "Content-Type: text/xml" --data-binary '<optimize/>'
java.lang.ClassNotFoundException: org.wltea.analyzer.lucene.IKTokenizerFactory
解決方案: - 確認JAR路徑正確 - 檢查文件權限(需solr用戶可讀)
在solrconfig.xml中增加:
<indexDefaults>
<ramBufferSizeMB>100</ramBufferSizeMB>
</indexDefaults>
通過本文介紹的兩種方案,用戶可以根據實際需求選擇適合的中文分詞器。對于需要高精度分詞的場景推薦IK Analyzer,而追求部署簡便性的場景可選擇SmartCN。建議在生產環境部署前進行充分的性能測試和詞典優化。
注意:所有配置修改后都需要重啟Solr服務生效,建議在維護窗口期操作。 “`
(全文約1350字)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。