2012-09-21 6 views
0

I가 쿼리에서 LOCALDATE을 만족 EML ID의 목록을 가져 EML 내용, ID와 LOCALDATE 필드와 나중에 LOCALDATE에 DATERANGE 쿼리를 쏜 인덱스 EML 파일에 루씬 .NET을 사용하고 실패합니다. 나는 약 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); 

그것은 검색에 다음과 같은 예외를 throw는 :

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

? RangeQuery는 2.9.4에서 더 이상 사용되지 않으며 (대신 TermRangeQuery 사용) 3.0.3에서 제거되었습니다. – sisve

+0

lucene 3.0.3 .net dll에 대한 다운로드 링크를 알려주십시오. 강조 표시 기능을 사용하고 싶습니다. –

+0

3.0.3은 시험판 패키지를 사용하는 경우 nuget을 사용하여 찾을 수 있습니다. 나는 그것이 몇 주 안에 "완전히"풀려날 것으로 추정한다. – sisve

답변

0

문제는 BooleanQuery.SetMaxClauseCount (Int32.MaxValue)를 사용하여 해결 하였다; 사용중인 Lucene.Net 어떤 버전의