Indexing Lucene索引与搜索问题

Indexing Lucene索引与搜索问题,indexing,lucene,Indexing,Lucene,在lucene中编制索引时,我遇到了课程课程开始日期和结束日期的问题。一门课程可以有多个课时,每个课时都可以有开始和结束日期。说startdate1-enddate1,startdate2-enddate2 目前,我在lucene中将courseid和会话开始日期和结束日期分别作为多值字段进行索引。类似于课程:[courseid1]startdate:[startdate1 startdate2…],enddate:[enddate1 enddate2…] 现在,我的要求是找到在我通过的时间范围

在lucene中编制索引时,我遇到了课程课程开始日期和结束日期的问题。一门课程可以有多个课时,每个课时都可以有开始和结束日期。说startdate1-enddate1,startdate2-enddate2

目前,我在lucene中将courseid和会话开始日期和结束日期分别作为多值字段进行索引。类似于课程:[courseid1]startdate:[startdate1 startdate2…],enddate:[enddate1 enddate2…]

现在,我的要求是找到在我通过的时间范围内开始或结束课程的所有课程,并且开始日期和结束日期不应为空。此外,开始日期和结束日期可以为空,我将空日期保存为0

会话->

会话1:20151205开始日期空结束日期
会话2:空开始日期20151202结束日期

在lucene索引中->

会话开始日期:0 20151205,会话日期:20151202 0

我的lucene查询->

sessionstartdate:[20151201 TO 20151210] sessionenddate:[20151201 TO 20151210]
Issue->此查询正在查找课程,但由于两个会话都有一个空日期,因此不应该这样做

因此,我将查询修改为-

(sessionstartdate:[20151201 TO 20151210] - sessionenddate:0) (sessionenddate:[20151201 TO 20151210] -sessionstartdate:0)
这不会返回路线,这很好,但现在在以下场景中失败-

会话1:20151205开始日期空结束日期
会话2:空开始日期20151202结束日期
第三节:20151201开始日期20151202结束日期


我没有得到任何数据,即使我应该得到。

首先:默认情况下,查询中的每个子句都被视为
应该
子句。这意味着在任何匹配中只能出现这些子句中的一个或多个(这两个子句的匹配分数都较高)。为了要求查询项出现在任何匹配项中,它前面应该有一个
+
,因此您的查询应该是:

+sessionstartdate:[20151201 TO 20151210] +sessionenddate:[20151201 TO 20151210]
现在的问题是,您无法匹配session1的开始和结束日期。上面的查询将匹配任何一对开始日期和结束日期。因此,您仍然会将文档与问题中列出的session1和session2与此查询进行匹配,正如您所述,这不是您想要的


处理这个问题的最佳方法可能是将会话存储为完全独立的文档,并使用Lucene来处理关系(顺便说一句,当考虑在Lucene中使用连接时,我会问自己的第一个问题是“我应该使用关系数据库吗?”)。

首先:查询中的每个子句在默认情况下,被视为
子句。这意味着在任何匹配中只能出现这些子句中的一个或多个(这两个子句的匹配分数都较高)。为了要求查询项出现在任何匹配项中,它前面应该有一个
+
,因此您的查询应该是:

+sessionstartdate:[20151201 TO 20151210] +sessionenddate:[20151201 TO 20151210]
现在的问题是,您无法匹配session1的开始和结束日期。上面的查询将匹配任何一对开始日期和结束日期。因此,您仍然会将文档与问题中列出的session1和session2与此查询进行匹配,正如您所述,这不是您想要的

处理这一问题的最佳方法可能是将会话存储为完全独立的文档,并使用Lucene来处理关系(顺便提一下,当考虑在Lucene中使用连接时,我会问自己的第一个问题是“我应该使用关系数据库吗?”)