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 に答える