zoukankan      html  css  js  c++  java
  • solr配置IKAnalyzer抛出ClassNotFoundException

        这个问题搞了很久,在QQ群上问了很久,关键很气人的是我居然被群主给开了。我也是醉了。我不知道我哪里得罪了那个solr群的群主。

        废话不多说。抛出的异常如下:


    刚开始一直认为是没有找到类,也就相当于没找到jar包。但是我的jar包是放到WEB-INF/lib目录中的。我又认为是IK分词器的版本问题,又去下载了新版本jar包,还是不行。然后看到solrconfig.xml中有配置jar路径的配置,然后各种尝试指定IKAnalyzer2012FF_u1.jar的路径----悲催的还是找不到路径。然后又看到http://aswang.iteye.com/blog/1240718这篇博客,以为是缺少其他jar包,又是各种配置,重启。还是不行。

          。。。(好吧,根据经验,一般钻牛角尖是钻不通的。我放弃了。)

         闲来无事,复习到spring的aop和ioc,需要理解反射机制,又复习了反射机制。这下理解了为什么会抛出ClassNotFoundExeception呢?

    Class<_001_Object_getClass> clazz = (Class<_001_Object_getClass>) Class.forName("priv.lirenhe._001_reflect._001_Object_getClass");//类路径
    Constructor<_001_Object_getClass> constructor = clazz.getConstructor(null);//思考参数null
    _001_Object_getClass object02 = constructor.newInstance(null);
    System.out.println("反射机制调用方法:"+object02.getName());

    给构造方法传入参数null。 但是一直抛ClassNotFoundExe?已下载明白了,不仅仅只是类路径错了,或者没有那个jar包导致的找不到类路径,同样也是传入构造方法的参数 不符合要求导致类一直找不到。顿时醒悟,那么在配置中导致类找不到应该就是是配置的参数缺失导致的。

    在配置IKAnalyzer的时候,我是参考别人的配置方法,别人的配置运行起来能成功,自己的不行,其实这就是因为版本问题,新版本中肯定修改了某个类,导致仅仅注入org.wltea.analyzer.luceneIKAnalyzer时由于没有传参给相应的构造方法而不成功。

    ---------给solr注入IKAnalyzer分词器到底具体修改了哪个类,不得而知,望指正。

    所以我在schma.xml进行以下配置:

    //之前的配置
    <fieldType name="text_ik" class="solr.TextField">
              <analyzer  class="org.wltea.analyzer.lucene.IKAnalyze"/>
    </fieldType>
    //新配置
    <fieldType name="text_ik" class="solr.TextField">
       <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
       <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
    </fieldType>
    
    <field name="item_title" type="text_ik" indexed="true" stored="true"/>
    <field name="item_sell_point" type="text_ik" indexed="true" stored="true"/>
    <field name="item_price"  type="long" indexed="true" stored="true"/>
    <field name="item_image" type="string" indexed="false" stored="true" />
    <field name="item_category_name" type="string" indexed="true" stored="true" />
    <field name="item_desc" type="text_ik" indexed="true" stored="false" />
    
    
    <field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
    <copyField source="item_title" dest="item_keywords"/>
    <copyField source="item_sell_point" dest="item_keywords"/>
    <copyField source="item_category_name" dest="item_keywords"/>
    <copyField source="item_desc" dest="item_keywords"/>

    居然可以了,不再报错了。

    接下来就是导入数据了。


    转发请注明地址:https://blog.csdn.net/mark_lirenhe/article/details/80570963

    本文如有问题,请指正。加我QQ:1017621207









  • 相关阅读:
    如何实现类的成员函数作为回调函数
    Windows Azure Storage浏览器
    基础设施即服务系列:Windows Azure上支持Linux虚拟机
    Web Sites系列:.NET和Visual Studio上Windows Azure Web site体验
    Windows Azure 存储之本地冗余存储介绍
    上海职场六大关键词完全搜集之:职位
    初学 Delphi 嵌入汇编[2] 汇编语言关键字
    for 循环的例子
    初学 Delphi 嵌入汇编[5] 寄存器在过程与函数中的使用 续
    初学 Delphi 嵌入汇编[3] 第一个 Delphi 与汇编的例子
  • 原文地址:https://www.cnblogs.com/lirenhe/p/9774491.html
Copyright © 2011-2022 走看看