lucene搜索在日期范围内失败

时间:2012-09-21 08:33:03

标签: c# lucene.net lucene

我正在使用Lucene .net使用eml内容,id和localdate字段索引eml文件,然后在localdate上触发日期范围查询以获取满足查询的localdate的eml id列表。我已经扫描了大约8000个eml文件并进行了搜索,这对于有限的查询集很有效。如果通过保持日期低于2010年4月30日来触发查询,则如果起始日期是2010年4月30日之后查询失败,则查询将返回结果。我很惊讶地看到行为,查询应该适用于所有日期范围。以下是使用的代码。

DateTime from = DateTime.Parse("3/30/2010 11:00:00 AM");// DateTime.Now.AddMonths(-12);

DateTime to = DateTime.Now;

String sFrom = DateTools.DateToString(from, DateTools.Resolution.SECOND);  

String sTo = DateTools.DateToString(to, DateTools.Resolution.SECOND);

Lucene.Net.Index.Term date1 = new Lucene.Net.Index.Term("LOCALDATE", sFrom + "*");

Lucene.Net.Index.Term date2 = new Lucene.Net.Index.Term("LOCALDATE", sTo + "*");

Lucene.Net.Search.Query dateRangeQuery = new Lucene.Net.Search.RangeQuery(date1, date2, true);

Hits hits = searcher.Search(dateRangeQuery);

它会在搜索上抛出以下异常:

System error.

at Lucene.Net.Search.BooleanQuery.Add(BooleanClause clause)
   at Lucene.Net.Search.BooleanQuery.Add(Query query, Occur occur)
   at Lucene.Net.Search.RangeQuery.Rewrite(IndexReader reader)
   at Lucene.Net.Search.IndexSearcher.Rewrite(Query original)
   at Lucene.Net.Search.Query.Weight(Searcher searcher)
   at Lucene.Net.Search.Hits..ctor(Searcher s, Query q, Filter f)
   at Lucene.Net.Search.Searcher.Search(Query query, Filter filter)
   at Lucene.Net.Search.Searcher.Search(Query query)
   at LuceneIndexTestApp.Form1.Search(String text, IndexSearcher searcher, QueryParser parser) 

任何帮助将不胜感激!!

谢谢, Haseena

1 个答案:

答案 0 :(得分:0)

使用BooleanQuery.SetMaxClauseCount(Int32.MaxValue)解决了问题;