最近一直负责做lucene构建搜索引擎,其中采用的中文分词器就是qieqie提供的庖丁解牛分词器。由于发现当搜索:
1、关于番禺供电局增加乙类工作票签发人的请示
2、关于从化供电局2006年度“两票”考核奖励方案的报告
3、关于辖区内10KV架空线路两旁(线行下)受树木影响情况的报告
4、关于增城供电局防坠落装置安装和使用情况的报告
5、关于广州萝岗供电局2007年安措计划的报告
6、关于召开重要变电站事故应急预案编制讨论会的通知(9月9日上午9:30)
7、关于召开《广东电网继电保护通信通道运行管理办法》
当搜索整条句子时查不出结果,但是去掉红色部分再查找却可以查找到结果。
刚开始的分析:
从以上可总结出:
1、2、3、4、5:去掉的部分都是地名。
7:去掉的是特殊符号
6:还未找出具体问题,当查询“关于召开重要变电站事故应急预案编制讨论会的通知”还是一样查找不出结果。
本想去研究一下庖丁解牛分词的源码,可现在这两周接到做jbpm工作流的任务,所以一直拖着没去看。
可这个问题一直挂在心上,昨天突然想到那个配置文件:
<bean id="writerAnalyzer" class="com.net.paoding.analysis.analyzer.PaodingAnalyzer">
<property name="knife" ref="paoding"/>
<property name="mode" value="1"/>
</bean>
<bean id="queryAnalyzer" class="com.net.paoding.analysis.analyzer.PaodingAnalyzer">
<property name="knife" ref="paoding"/>
<property name="mode" value="2"/>
</bean>
<bean id="paoding" class="com.net.paoding.analysis.knife.PaodingMaker" factory-method="make"/>
写索引的时候采用writerMode(1)而查询的时候采用queryMode(2),会不会是这两次采用了不同的模式导致。
所以把上面查询的模式也改为writerMode即value="1".再查询发现可以查出上面的结果出来。看来还真是这个问题导致。
今早来上班又到网上查了下,原来qieqie早已提到了这个问题。
qieqie在javaeye上的帖子中的回复内容:
参见:
[url=http://analysis.group.javaeye.com/group/post/15584 ]JavaEye:Spring Context下使用"庖丁解牛" [/url]
或:
Google:Spring Context下使用"庖丁解牛"
简单摘要(以上面两个链接中的说明为准,这里只是摘要):
Java代码
<bean id="writerAnalyzer" class="com.net.paoding.analysis.analyzer.PaodingAnalyzer">
<property name="knife" ref="paoding"/>
<property name="mode" value="1"/>
</bean>
<bean id="queryAnalyzer" class="com.net.paoding.analysis.analyzer.PaodingAnalyzer">
<property name="knife" ref="paoding"/>
<property name="mode" value="2"/>
</bean>
<bean id="paoding" class="com.net.paoding.analysis.knife.PaodingMaker" factory-method="make"/>
补:
1 、建立索引和使用索引只能使用同一种/模式的分词器
2、2.0.2以后(包含)queryMode和writerMode这两个名称将重构为更好的名称,请留意倒是的API说明或readme变更说明。