在本章,将要解决的核心问题是:
给定query,返回的结果文档必须包含查询词中的至少一个词。
试图通过构造booleanquery,手动编写collector。
下面先构造测试用例
query:yang wen jing
在索引中所有文档有:
doc1:yang yang
doc2:wen wen
doc3:jing jing
doc4: yang wen jing
doc5:no key words
那么输出结果是:1,2,3,4(此乃文档编号)
下面开始构造query(or and)
(1)
使用booleanquery每一个word的termquery用or连接。
(2)如果是and,booleanquery每一个word的termquery用and连接
这个函数可以完成上面的两个需求,轻松设置要满足query中的多少比例的查询词
在collector的继承中,改写collector函数。不使用评分函数,直接输出docid
在collector的collect函数,实现将符合要求的文档进行输出。在这里我们需要输出的是文档编号。用于后续评价。
(3)要实现float范围搜索
在search的时候写成如下格式便可以了
(4)使用IndexReader根据lucene中的文档编号提取相关信息
至此,我们就可以在python环境下编写相关代码了。
首先初始化Search类
然后重写了collecor类,将匹配上的文档放在了collector中,
在timestamp范围内的查询函数
其中的similarity的创建如下
至此,虽然没有完成,但是已经差不多写好了A组实验代码
在服务器上运行的时候,你会发现
用float的时候,这个range是不行的,不能加上后面的.0
这样可以运行
对子类初始化的时候,一定要初始化其父类
但是又出现这个问题
在search的时候报错了
又是参数错误,莫名其妙的
貌似是pylucene的问题,所以我就用java来写这部分程序吧
搜索过程没有问题,下面对结果进行部分抽检。将程序结果存放在txt文件中。然后抽查部分文档,使用工具检测其中是否含有关键字。
搜索结果出来了,Hour的持续时间是从2012-1-14到2012-1-31期间的数据
随机选择一个文档1326880859-9878bf9b7d0dc55916e57ec895664bf3,使用工具该文档的内容
可以知道检索的结果是正确的。是沉船相关的内容。