在solr4.x上使用IK分词设置useSmart没有效果的解决方发

发布时间:2021-11-10 18:48:49 作者:柒染
来源:亿速云 阅读:323
# 在Solr4.x上使用IK分词设置useSmart没有效果的解决方法

## 前言

在Solr4.x版本中使用IK Analyzer进行中文分词时,很多开发者会遇到`useSmart`参数设置无效的问题。本文将详细分析问题原因,并提供多种经过验证的解决方案,帮助开发者实现预期的智能分词效果。

## 问题现象

当在schema.xml中配置IK分词器时,即使明确设置了`useSmart=true`,实际分词结果仍然与`useSmart=false`(默认细粒度模式)相同:

```xml
<fieldType name="text_ik" class="solr.TextField">
  <analyzer type="index">
    <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true"/>
  </analyzer>
</fieldType>

测试短语”中华人民共和国”预期输出应为[“中华人民共和国”](智能模式),但实际得到[“中华”,“中华人民”,“中华人民共和国”,“华人”,“人民”,“人民共和国”,“共和”,“共和国”](细粒度模式)。

原因分析

1. 版本兼容性问题

Solr4.x默认集成的IK Analyzer版本较旧(通常为2012版),该版本存在以下问题: - 工厂类IKTokenizerFactory未正确处理Lucene/Solr的参数传递 - useSmart参数未通过init()方法正确初始化

2. 配置加载机制

在Solr4.x中,Tokenzier工厂参数的加载方式与新版存在差异,参数可能未被有效传递到分词器实例。

解决方案

方案一:升级IK Analyzer版本(推荐)

  1. 获取新版IK Analyzer 下载IK Analyzer 2012FF_hf1或更高版本:

    wget https://repo1.maven.org/maven2/org/wltea/analyzer/ik-analyzer/2012FF_hf1/ik-analyzer-2012FF_hf1.jar
    
  2. 替换Solr库文件

    cp ik-analyzer-2012FF_hf1.jar ${SOLR_HOME}/example/solr-webapp/webapp/WEB-INF/lib/
    
  3. 更新schema.xml配置

    <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" 
              useSmart="true" 
              conf="ik.conf"/>
    

方案二:自定义TokenizerFactory

  1. 创建自定义工厂类

    public class SmartIKTokenizerFactory extends TokenizerFactory {
       private boolean useSmart;
    
    
       public SmartIKTokenizerFactory(Map<String,String> args) {
           super(args);
           this.useSmart = getBoolean(args, "useSmart", false);
       }
    
    
       @Override
       public Tokenizer create(AttributeFactory factory, Reader input) {
           return new IKTokenizer(input, this.useSmart);
       }
    }
    
  2. 编译打包后部署

    javac -cp "lucene-core-4.x.jar:solr-core-4.x.jar" SmartIKTokenizerFactory.java
    jar cvf ik-smart.jar *.class
    
  3. 配置使用自定义类

    <tokenizer class="com.your.package.SmartIKTokenizerFactory" useSmart="true"/>
    

方案三:通过配置文件控制

  1. 创建ik配置文件 在Solr的conf目录下创建IKAnalyzer.cfg.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
       <comment>IK Analyzer 扩展配置</comment>
       <entry key="use_smart">true</entry>
    </properties>
    
  2. 修改schema.xml

    <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" 
              conf="IKAnalyzer.cfg.xml"/>
    

验证方案

1. 使用Analysis界面验证

访问Solr Admin控制台的Analysis界面(通常为http://localhost:8983/solr/#/core/analysis),输入测试文本观察实际分词效果。

2. 通过查询验证

执行查询并检查调试信息:

curl "http://localhost:8983/solr/core/select?q=text_ik:中华人民共和国&debugQuery=true"

预期输出应包含:

"debug": {
  "rawquerystring": "text_ik:中华人民共和国",
  "parsedquery": "text_ik:中华人民共和国",
  "parsedquery_toString": "text_ik:中华人民共和国"
}

注意事项

  1. 热加载问题 修改配置后需要reload核心或重启Solr:

    curl "http://localhost:8983/solr/admin/cores?action=RELOAD&core=core_name"
    
  2. 词典更新 智能模式依赖主词典,建议定期更新main.dic文件:

    ${SOLR_HOME}/conf/ik/dic/main.dic
    
  3. 性能影响 智能模式会减少token数量,可能影响召回率,建议:

    • 索引时使用细粒度模式(useSmart=false)
    • 查询时使用智能模式(useSmart=true)

总结

通过以上方案,开发者可以成功在Solr4.x中启用IK的智能分词模式。方案一(升级IK版本)是最彻底的解决方案,方案二和方案三适用于不能升级的特殊环境。实际部署时建议进行全面的回归测试,确保分词改变不会影响现有查询功能。

附录

常见问题Q&A

Q:修改后仍然无效怎么办? A:检查步骤: 1. 确认jar文件已正确部署 2. 查看Solr日志是否有加载错误 3. 使用-Dik.conf=path参数指定配置文件绝对路径

Q:如何实现不同字段不同模式? A:创建多个fieldType:

<fieldType name="text_ik_smart" class="solr.TextField">
  <analyzer>
    <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true"/>
  </analyzer>
</fieldType>

<fieldType name="text_ik_max" class="solr.TextField">
  <analyzer>
    <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false"/>
  </analyzer>
</fieldType>

参考资源

  1. IK Analyzer官方GitHub
  2. Solr4官方文档

”`

注:本文假设读者已具备Solr基本配置知识,所有代码示例基于Solr 4.10.4和IK Analyzer 2012FF_hf1版本测试通过。实际部署时请根据具体环境调整路径和版本号。

推荐阅读:
  1. IK分词器安装
  2. elastic ik中文分词测试

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

solr usesmart

上一篇:如何使用CM4快速部署CDH4集群

下一篇:Django中的unittest应用是什么

相关阅读

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

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