2009-10-31 64 views
2

我试图想出一种方法来查询Lucene中的日期。基本上我有一个事件有一个开始日期,结束日期,也可以定期发生。我试图去解决这个问题的方法是在Lucene中创建一个索引字段,它将列出用逗号分隔的所有可能的日期(或者空白空间就足够了),而不是将范围搜索应​​用到它。该日期被收录的是这样的:Lucene索引循环事件的麻烦

事件的起始于31-10-09: “20091031”

事件B开始对31-10-09和持续2天:“20091031,20091101, 20091102"

事件C重复每周六为未来3个星期六:‘20091031,20091107,20091114’

这但是如果我一直在寻找20091030和20091101之间的事件并没有因为工作,它应该列出事件A,B和C,但因为B和C有s在没有找到它们的要求范围之外发生。

任何想法如何解决它?谢谢

+0

您尚未显示创建文档(或至少是该文档中的字段)的代码,也没有显示用于查询的代码,因此您不太可能得到任何好的答案。 – 2009-10-31 20:50:54

+0

我不认为代码与我的问题有关,因为它更像是“你会怎么做?”比“我的代码中的错误在哪里?”之类的事情。 – 2009-10-31 21:09:21

回答

1

一种可能的方法是为每个事件的每次出现创建一个单独的文档。 事件B和C都将有三个文件,每个文件都有一个日期字段和一个事件名称字段。简单的范围搜索可以找到事件。

另一个问题是,是否在Lucene中完成此操作。有关相关问题的讨论,请参阅Search Engine versus DBMS

+0

这实际上是一个好主意。谢谢!至于Lucene/DBMS决策,在项目的这个阶段做出这种决定为时已晚。然而,我的搜索算法比范围搜索更复杂,尽管我确信我可以在RDBMS中实现不同属性的加权等,但它似乎太麻烦了。 – 2009-11-08 20:58:27