gpt4 book ai didi

java - Lucene 4.10 日期范围查询 API

转载 作者:行者123 更新时间:2023-11-30 03:45:01 26 4
gpt4 key购买 nike

我想在 Lucene 4.10 中以编程方式构建日期字段的范围查询,但无论如何我都找不到这样做。我的伪代码是:

new DateRangeQuery(dateLowerBound, dateUpperBound);

使用org.apache.lucene.document.DateTool类来转换它然后使用NumericRangeQuery是个好主意吗?

最佳答案

我会选择两种可能性之一:

1 - 使用 DateTools 获取有利于索引的字符串表示形式:

String indexableDateString = DateTools.dateToString(theDate, DateTools.Resolution.MINUTE);
doc.add(new StringField("importantDate", indexableDateString, Field.Store.YES));
...
TopDocs results = indexSearcher.search(new TermRangeQuery(
"importantDate",
new BytesRef(DateTools.dateToString(lowDate, DateTools.Resolution.MINUTE)),
new BytesRef(DateTools.dateToString(highDate, DateTools.Resolution.MINUTE)),
true,
false
));
...
Field dateField = resultDocument.getField("importantDate")
Date retrievedDate = DateTools.stringToDate(dateField.stringValue());

2 - 跳过日期工具,并使用 Date.getTime()Calendar.getTimeInMillis() 或类似方法将日期索引为数值:

long indexableDateValue = theDate.getTime();
doc.add(new LongField("importantDate", indexableDateValue, Field.Store.YES));
...
TopDocs results = indexSearcher.search(NumericRangeQuery.newLongRange(
"importantDate",
lowDate.getTime(),
highDate.getTime(),
true,
false
));
...
Field dateField = resultDocument.getField("importantDate")
Date retrievedDate = new Date(dateField.numericValue());

我通常会选择第一个,因为它使对精度的控制更加明显,但无论您喜欢哪个,都应该可以正常工作。

另外值得一提的是solr的TrieDateField ,不过如果您还没有使用 solr,我真的不建议您深入了解。

关于java - Lucene 4.10 日期范围查询 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25973175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com