Oracle Berkeley DB XML fulltext检索中的bug

       最近读BDBXML的源码的时候,发现它对w3c推荐的fulltext草案的支持功能并不全。而BDBXML对fulltext的支持,完全是调用了XQilla的fulltext部分,所以更确切的说是,XQilla对fulltext检索的支持不全,。不过,这也难怪,毕竟w3c每年都在修改草案,要是一次性就把所有的功能都支持了,估计也不太可能。

      暂且不说未支持的fulltext检索的功能,比如通配符,词根查询,停用词,大小写等等。只考虑已经认为被XQilla支持的功能中,比如order,就存在一个非常致命的bug。具体分析一下:比如某个book的title内容为:Improving the  Usability of a Web Site Through Expert Reviews and Usability Testing。如果针对title,查询ftcontains "of a Web",查询结构肯定是正确的,说明这个title中确实包含这三个词,而且顺序也一样。但是如果ftcontains "the Usability of"或者"and Usability Testing"的话程序就会崩溃。细心查看就会发现,后面这两个查询都包含了"Usability",而这个词在title中出现了两次。好了,问题定位已经完成。

      但是要找到产生这个bug的原因,还是得研究源码。对源码分析以后,发现这和XQilla中的fulltext的底层实现策略有关。因为它对每个节点的内容,分词以后将其哈希,如果出现重复单词的话,哈希表中也只存一份,而该单词的位置信息也只是记录该单词第一次出现的位置。这就直接造成了,多个单词的位置判断出现错误。

      小结一下:如果要将这个bug去除,可以考虑改变底层的实现策略,不用哈希表,或者改变哈希值的产生式。总之就是要把所有的重复单词都存储起来,更确切的说是将每个单词的所有位置信息都保存好。这样子就不会出现遗漏或者判断失误的现象了。而至于为什么在判断失误的情况下程序就崩溃了(理论上来说如果位置信息判断不满足条件的话,顶多只是说这个title不符合查询条件),有待于进一步分析其结构设计。

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值