2012-09-21 106 views
0

我正在使用Lucene.net將eml文件與eml內容,id和localdate字段進行索引,然後在localdate上發出daterange查詢以獲取滿足本地日期和來自查詢的eml id列表。我掃描了大約8000個eml文件並進行了搜索,這對於有限的查詢集工作正常。如果通過從2010年4月30日起保留日期來啓動查詢,則如果起始日期在2010年4月30日之後,則查詢將失敗,然後查詢將返回結果。我很驚訝地看到這個行爲,查詢應該適用於所有的日期範圍。以下是使用的代碼片段。lucene日期範圍搜索失敗

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

+0

你使用的是什麼版本的Lucene.Net? RangeQuery在2.9.4中已經過時(改爲使用TermRangeQuery),並在3.0.3中刪除。 – sisve

+0

能否請你告訴我lucene 3.0.3 .net dll的下載鏈接。我想使用突出顯示功能。 –

+0

如果啓用預發佈軟件包,則可以使用nuget找到3.0.3。我估計它會在幾周內「完全」發佈。 – sisve

回答

0

的問題是使用BooleanQuery.SetMaxClauseCount(Int32.MaxValue)解決;