mmseg4j-1.8 中的 MMSeg4jHandler
发表于:2009年10月18日 | 分类:mmseg4j | 标签: handler, mmseg4j, solr | views(1,833)
版权信息: 可以任意转载, 转载时请务必以超链接形式标明文章原文出处, 即下面的声明.
原文出处:http://blog.chenlb.com/2009/10/mmseg4j-handler.html
mmseg4j 1.8 中有词库变化检测功能,新加载词库后,很有可能此时的分词(搜索时)与索引不对应了。所以要有个机制让重新做索引。
这里使用最简单的方式,就是被动式的加载词库。由外围的程序去决定什么时候更新词库,然后也由外围的程序决定重做索引与否。比如可以写个 shell 脚本放到 crontab 里。
按solr 的理念——用 url 方式去通知 mmseg4j 加载词库。这个任务交出 MMseg4jHandler 去做。
参数:
- dicPath 是指定词库的目录,特性与MMSegTokenizerFactory中的dicPath一样(相对目录是,是相对 solr.home)。
- check 是指是否检测词库,其值是true 或 on。
- reload 是否尝试加载词库,其值是 true 或 on。此值为 true,会忽视 check 参数。
solrconfig.xml:
1. <requestHandler name="/mmseg4j" class="com.chenlb.mmseg4j.solr.MMseg4jHandler" >
2. <lst name="defaults">
3. <str name="dicPath">dic</str>
4. </lst>
5. </requestHandler>
<requestHandler name="/mmseg4j"class="com.chenlb.mmseg4j.solr.MMseg4jHandler" >
<lst name="defaults">
<str name="dicPath">dic</str>
</lst>
</requestHandler>
然后可以用 http://localhost:8080/solr-1.4/mmseg4j/?reload=true 去尝试加载(注意:内存空间要有2倍词库大小的可能空间。一个词库可可能 50M)。
返回结果如下:
1. <?xml version="1.0" encoding="UTF-8" ?>
2. <response>
3.
4. <lst name="responseHeader">
5. <int name="status">0</int>
6. <int name="QTime">0</int>
7. </lst>
8. <lst name="result">
9. <str name="dicPath">java.net.URI:file:/E:/workspace/solr/example/solr-mmseg4j/dic/</str>
10. <bool name="changed">true</bool>
11. <bool name="reloaded">true</bool>
12. </lst>
13. </response>
<?xmlversion="1.0" encoding="UTF-8" ?>
<response>
<lstname="responseHeader">
<intname="status">0</int>
<intname="QTime">0</int>
</lst>
<lstname="result">
<str name="dicPath">java.net.URI:file:/E:/workspace/solr/example/solr-mmseg4j/dic/</str>
<boolname="changed">true</bool>
<boolname="reloaded">true</bool>
</lst>
</response>
只要检测 /response/lst[@name='result']/bool[@name='reloaded'] 的值就可以决定是否要重做索引了。
注意:dicPath 参数是 MMSegTokenizerFactory 里指定的 dicPath 才有意义。