2013-06-18 50 views
0

我们使用的是lucene 2.4.0。Lucene: - 如何检查给定的日期是否在两个索引日期字段之间或不是?

几千文档进行索引,文件系统

以下两个字段中指数与许多其它领域一起:

我使用MultiFieldQueryParser因为许多其他领域都参与了搜索查询。

EffectiveDate="1970-01-01T00:00:00-05:00" 
    ExpirationDate="2035-12-31T00:00:00-05:00" 

1)

有没有什么办法来检查给定的日期是否是两个索引的日期字段或不

2)

之间有什么在lucene中设置最大大小返回结果的方法。

+0

关于“countValue”:我不知道你指的是。 – femtoRgon

+0

@femtoRgon countValue =它只是一个值。我们可以在lucene中将最大大小设置为返回结果。 – nav0611

回答

1

它看起来像你的日期格式化为字典顺序,所以检查一个值是否在两个不同的字段之间会遵循一个模式。 Lucene的没有开始支持open-ended queries in the StandardQueryParser直到3.6版本,所以选择adequantely大的上限和下限,以模拟一个开放式的查询:

+EffectiveDate:[0000-01-01 TO value] +ExpirationDate:[value TO 9999-12-31] 

我相信哪个,不会与MultiFieldQueryParser很好地工作。您可能需要通过该解析器运行剩余的查询,并通过StandardQueryParser类似上面的内容并将它们与BooleanQuery合并。

你也可以手动构造相同的查询,像:

TermRangeQuery tqlow = new TermRangeQuery("EffectiveDate", null, new BYtesRef(value), true, true); 
TermRangeQuery tqlow = new TermRangeQuery("ExpirationDate", new BYtesRef(value), null, true, true); 
BooleanQuery betweenQuery = new BooleanQuery(); 
betweenQuery.add(new BooleanClause(tqlow, BooleanClause.Occur.MUST)); 
betweenQuery.add(new BooleanClause(tqhigh, BooleanClause.Occur.MUST)); 

Query parsedQuery = MultiFieldQueryParser.parse............ 

BooleanQuery rootQuery = new BooleanQuery(); 
rootQuery.add(new BooleanClause(parsedQuery, BooleanClause.Occur.MUST)); 
rootQuery.add(new BooleanClause(betweenQuery, BooleanClause.Occur.MUST)); 
+0

countValue =它只是一个值。我们可以在lucene中将最大大小设置为返回结果。 – nav0611

+1

仍不确定你的意思。您可以设置[IndexSearcher.search]找到的最大结果数量(http://lucene.apache.org/core/4_0_0-BETA/core/org/apache/lucene/search/IndexSearcher.html#search(org) .apache.lucene.search.Query,%20int))调用,您可以从[TopDocs.totalHits](http://lucene.apache.org/core/4_0_0-BETA/core/org)获得匹配数量/apache/lucene/search/TopDocs.html#totalHits)。这些你想要得到的是哪一个? – femtoRgon

+0

例如:)如果我设置了maxCount = 15那么它应该返回前15个结果..是否有可能 – nav0611

相关问题