mmseg4j-1.9 solr4 bug 处理

2019-03-27 01:21|来源: 网路

目前 中文分词mmseg4j  在 solr4 下是不能正常工作的。
解决方法可简单了, 只是solr4 接口有点变化 。

中文分词mmseg4插件的作者 没及时的跟上"solr4 接口"变化。 虽然分词算法是对的,添加的文档不能建索引。

源码80M读是读不懂的。在源码里猜测查找 不能新建索引这个的原因,比较费劲,差点没找到,结果还是“凑巧”给找到了。

bug描述:
(1)java.lang.RuntimeException: java.lang.NoSuchMethodError: org.apache.l
ucene.analysis.Tokenizer.reset
报错信息
http://code.google.com/p/mmseg4j/issues/detail?id=31 我是在分词测试时碰到这样的错误的。
解决方法

这里的这个文件里的setReader 是新版solr4提供的。旧的接口reset 已经过期。
(2)
不能建索引 的相关描述:http://code.google.com/p/mmseg4j/issues/detail?id=38
原因:MMSegTokenizer 还是按以前版本的的solr 接口的。
          MMSegTokenizer 在solr 里是缓存的,它和词库都是启动时就缓存了。 在后续有新的的短语要分词时,就会调用这个MMSegTokenizer.reset 方法把新词传进来,传给MMSegTokenizer。 但新版solr4里已经不调用这个reset方法了(也就是上图显示的那个reset方法),而是调用setReader ,这样MMSegTokenizer 实际分词的对象mmSeg就得不到新数据。于是 我加了下面的hack 代码,让mmSeg能得到新数据。

解决方法

mmseg4j-1.9 solr4 bug 处理 - wxf4150 - 飞的博客

 
找到MMSegTokenizer.java 这个文件打开 上图 框里的内容是我新加的。 自己找到mmSeg对象加上一个ReaderStatus 属性默认值填0。
然后编译这个包。再放到solr 里去。重启tomcat 就能工作了。

这里上传不了附件, 编译后的结果我就不提交了,大家自己改吧。
不知道google 空间的代码,作者什么时间改,我们就能直接用了。



转自:http://my.oschina.net/sunzy/blog/214974

相关问答

更多
  • 我常用 IKAnalyzer 分词, 至于庖丁分词 应该大同小异,你可以借鉴下 第一步,将 IKAnalyzer jar 放到 solr lib 文件夹下 第二步, solr core 的 schema.xml 定义一个自定义 类型,使用 IKAnalyzer 来解析(index&query) 第三步,此时 字段 就可以使用这个类型了 然后,就是些 IK的精细化 配置, 比如 同义词,词典 扩充等等,
  • 如果您之前没有尝试过,可以按照故障排除SolR4索引进行操作 ,这可能有助于您解决问题。 此外,您可以始终尝试执行完整的SolR 4索引重建,如SolR 4索引中所述, 重建并监视有关SolR的应用程序服务器日志。 还要仔细了解如何配置搜索属性并记住它 属性的数据字典设置确定如何索引单个属性 If you didn't try before, you can follow the Troubleshooting SolR4 index which may help you to overcome your ...
  • 这段代码对我来说很好 void a_quick(int array[], int i, int j){ //Array Quick Sort int top = j; int bot = i; int p_location = (j + i) / 2; int pivot = array[p_location]; do { while (array[i] < pivot)i++; while (array[j] > pi ...
  • 文档是一个很好的资源。 您可以在Alfresco服务器上运行安装程序,然后在Solr服务器上再次运行它。 在Alfresco服务器上,删除solr4 WAR。 在Solr服务器上,删除除Solr4 WAR之外的所有内容。 在alf_data中,有两个服务器上需要相同的密钥库目录。 您需要在Alfresco框中编辑alfresco-global.properties以指向Solr主机。 而且,您需要编辑Solr框中的alfresco-global.properties以指向solr索引。 在文档和这些提示之间 ...
  • 我在solrconfig.xml文件中添加了以下代码行 确保你的dist文件夹中的apache-solr-dataimporthandler-4.0.jar和apache-solr-dataimporthandler ...
  • 您可以使用名为“text”的副本字段 ,将所有可搜索字段复制到此字段中,并将其指定为默认搜索字段。
  • 我在网上搜索时偶然发现了你的问题,但由于你尚未在GitHub上更新你的代码 ,我想你可能仍然想知道问题是什么。 它在这段代码中: i = 0; do { state->state[i] = i; i++; } while (i != 255); 在这个循环迭代了255次后, i的值为255,循环将终止。 结果,状态缓冲区的最后一个字节未被初始化。 这很容易解决。 只需改变while (i != 255); 到while (i); 。 I stumbled across your q ...
  • 我认为最优化的方法是创建一个单独的集合或核心(取决于您是否使用云)并以某种方式索引数据,以便查询所需的查询结果。 当然,在某些情况下可能无法实现,但如果是在你的情况下,那就去做吧。 在这样的核心中,您只有与自动完成相关的字段和数据,因此在大多数情况下,它将比原始核心更小,更少的术语,这将导致更快的查询。 除此之外,此类核心或集合针对自动完成查询进行了优化,您将从中获得更多性能。 但是,如果您不能采用多核/集合方法,那么突出显示可能是最好的方法,如果您需要过滤。 在这种情况下,您可能希望打开术语验证器并使用F ...
  • 选择DataImportHandler。 下载postgresql的jdbc驱动程序并将其放在dist / dir中 将模块添加到配置文件: 按照Solr wiki的说明进行操作 请记住在scheme.xml中声明您的方案 在30分钟内完成。 Opte ...
  • Faceting是将搜索结果排列成类别(基于索引术语)。 在每个类别中, Solr报告相关术语的命中数,称为方面约束。 通过分面,用户可以轻松浏览电影网站和产品评论网站等网站上的搜索结果,其中类别中有许多类别和许多项目。 这是一个很好的例子...... Yonik面对的例子 solr wiki上的分面示例 在您的情况下,您可能需要再次触发查询以获取id和其他详细信息.... Faceting is the arrangement of search results into categories (whic ...