0

我正在使用 Lucene .net 来索引具有 eml 内容、id 和 localdate 字段的 eml 文件,然后在 localdate 上触发 daterange 查询以获取满足 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) 

任何帮助将不胜感激!!

谢谢,哈西娜

4

1 回答 1

0

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

于 2012-09-24T10:47:27.060 回答