中文分词器IKAnalyzer——IKQueryParser主类分析

1 篇文章 0 订阅
1 篇文章 0 订阅


一、大体流程

IKQueryParser此类是在指定fieldquery条件下,执行主方法_parse

1、首先调用IKSegmentation类进行lexeme分词;

2、紧接着调用核心方法accpet将每个lexeme生成对应的tokenbranch(其过程内有一系列关键方法,比如accept方法);

3、生成完整的tokenbranch以后(tokenbranch数据结构有点复杂稍后分析),执行关键方法toQueries将分支数据结构(tokenbranch)转成Query数据结构;

4、执行optimizeQueries方法,优化Query队列结构,减少Query表达式的嵌套,返回相应具体的TermQueryBooleanQuery

 

 

 

二、分析过程

首先理解此类生成的tokenbranch花了很多功夫,以下是一些初始分析过程:

 

1、初始参数、代码结构解析:

 

optimizeQueries方法将生成的Query结构优化,防止跟tokenbranch结构一样复杂。

 

 

核心方法_parse过程分析:发现生成tokenbranch结构关键方法为acceptaccept方法中acceptType表明了正在处理的lexeme与此branch的关系,由于是递归调用理解起来要花一点功夫。

 

 

具体accptType值生成方法cheakAccept过程:

 

2TokenBranch值的debug过程:


 

3TokenBranch值的结构实例:

 

 

 

 

4TokenBranch值的结构分析:

(这是最直观的Tokenbranch结构图,非常有助于理解)

 

5最终生成简洁的Query结构数据实例:

 

 

参考图:

 



附:例举Query
语法树




----------------------------------------
只是个人应用分析经验,相关问题欢迎交流~

此文原创,转载请注明出处: http://blog.csdn.net/li_ablexiao,thx...















  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值