Lucene: - 如何检查给定日期是否在两个索引日期字段之间或不是?

时间:2013-06-18 11:35:39

标签: lucene

我们正在使用lucene 2.4.0。

在文件系统中索引了一些千篇文档

以下两个字段索引以及许多其他字段:

我正在使用MultiFieldQueryParser,因为搜索查询中涉及许多其他字段。

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

1)。

有没有办法检查给定日期是在两个索引日期字段之间还是不在

之间

2)。

有没有办法将最大尺寸设置为lucene中的返回结果。

1 个答案:

答案 0 :(得分:1)

看起来你的日期格式化了字典排序,所以检查两个不同字段之间的值是否会遵循类似的模式。 Lucene直到版本3.6才开始支持open-ended queries in the StandardQueryParser,因此选择足够大的上限和下限,以模拟开放式查询:

+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));