- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我已经实现了一个 Lucene.NET (2.9) 搜索具有允许我在一个月和一年内传递的查询参数的事件 - 然后返回该月内运行的所有事件(即,如果我在 2013 年 12 月通过它将匹配在 12 月的一天运行的任何事件)。每个事件都有一个 StartDate 和一个 EndDate 参数。
我已经设法使用 RangeQuery 和类似这样的代码来实现它:
Lucene.Net.Search.BooleanQuery bq = new Lucene.Net.Search.BooleanQuery();
DateTime lowerBoundDate = new DateTime(search.Year.Value, search.Month.Value, 1).Date;
DateTime upperBoundDate = new DateTime(search.Year.Value, search.Month.Value, DateTime.DaysInMonth(search.Year.Value, search.Month.Value)).Date;
string lowerDate = DateTools.DateToString(lowerBoundDate, DateTools.Resolution.DAY);
string upperDate = DateTools.DateToString(upperBoundDate, DateTools.Resolution.DAY);
// lowerDate would be first day of month, upperDate would be last day of month
var lowerRange = new RangeQuery(null, new Term("StartDate", upperDate), true);
var upperRange = new RangeQuery(new Term("EndDate", lowerDate), null, true);
var query = new BooleanQuery();
query.Add(new BooleanClause(lowerRange, BooleanClause.Occur.MUST));
query.Add(new BooleanClause(upperRange, BooleanClause.Occur.MUST));
bq.Add(query, Lucene.Net.Search.BooleanClause.Occur.MUST);
但是,我知道 RangeQuery 已被弃用,而且似乎 NumericRangeQuery
是可行的方法(使用 NewIntRange)
,但我不确定该怎么做转换我现有的代码以使用它。我假设我将日期转换为一个整数并使用它,但不确定最小和最大界限是如何工作的[因为作为一个值类型,最小值和最大值都必须有一个值]。
我所有的尝试似乎都没有导致任何元素被退回。例如,这里有一个例子:
var lowerNumericRange = NumericRangeQuery.NewIntRange("StartDate", 0, Convert.ToInt32(upperDate), true, true);
var upperNumericRange = NumericRangeQuery.NewIntRange("EndDate", Convert.ToInt32(lowerDate), 0, true, true);
有什么线索吗?
最佳答案
无需切换到数字查询。您正在正确生成字符串日期表示,只需切换到 TermRangeQuery
.
var lowerRange = new TermRangeQuery("StartDate", null, upperDate, true, true);
var upperRange = new TermRangeQuery("EndDate", lowerDate, null, true, true);
关于c# - 如何将 Lucene.NET RangeQuery 转换为 NumericRangeQuery 以进行日期范围搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19655493/
我正在阅读以下文章,http://www.searchworkings.org/blog/-/blogs/the-state-and-future-of-spatial-search/ ,其中指出,
我已经实现了一个 Lucene.NET (2.9) 搜索具有允许我在一个月和一年内传递的查询参数的事件 - 然后返回该月内运行的所有事件(即,如果我在 2013 年 12 月通过它将匹配在 12 月的
我是一名优秀的程序员,十分优秀!