0

我们使用的是 lucene 2.4.0。

在文件系统中索引了数千个文档

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

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

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

1.)

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

2.)

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

4

1 回答 1

1

看起来您的日期格式适合字典顺序,因此检查一个值是否在两个不同字段之间将遵循类似的模式。Lucene 直到 3.6 版才开始支持StandardQueryParser 中的开放式查询,因此选择足够大的上限和下限来模拟开放式查询:

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

我相信,它不能很好地与MultiFieldQueryParser. 您可能需要通过该解析器运行查询的其余部分,并通过 a 运行类似上述内容StandardQueryParser并将它们与 a 合并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));
于 2013-06-18T16:03:06.297 回答