它看起来像你的日期格式化为字典顺序,所以检查一个值是否在两个不同的字段之间会遵循一个模式。 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));
关于“countValue”:我不知道你指的是。 – femtoRgon
@femtoRgon countValue =它只是一个值。我们可以在lucene中将最大大小设置为返回结果。 – nav0611