2014-09-28 6 views
4

내가lucene.net 정렬 액세스 위반

나는이 오류를 Search.dll

에서 발생 유형 'System.AccessViolationException'의 그러나

처리되지 않은 예외가 계속 루씬 내 결과를 정렬하려고 작동하지

추가 정보 : 보호 된 메모리를 읽거나 쓰려고 시도했습니다. 이것은 종종 다른 메모리가 손상되었다는 표시입니다.

Field.Index를 분석하고 분석하지는 않지만 기쁨을 설정하려고했습니다.

Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29); 

var parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "Title", analyzer); 
Query query = parser.Parse(searchTerm.Trim() + "*"); 

var searcher = new IndexSearcher(directory, true); 

var sortBy = new Lucene.Net.Search.Sort(new Lucene.Net.Search.SortField("Title", Lucene.Net.Search.SortField.STRING, true)); 

var filter = new QueryWrapperFilter(query); 
// TopDocs topDocs3 = searcher.Search(query, filter, 500,sortBy); 
// TopDocs topDocs = searcher.Search(query,500); 
TopDocs topDocs2 = searcher.Search(query,null, 500, new Sort(new SortField("Title", SortField.STRING))); 

var re = searcher.Search(query, null, 10, new Sort(new SortField("id", SortField.INT, true))); 

답변

0

검색 결과를 LUCENE_30 (으)로 주문하려고 할 때도 같은 오류가 발생했습니다. 저는이 예를 서둘러 쓴다고 말하고 테스트를 거치지 않아야합니다. 내가 한 것은 다음과 같습니다.

string sortText = Enum.GetName(typeof(SortableFields), sortBy); 
     SortField field = new SortField(sortText, SortField.STRING, sortDesc); 
     var sortByField = new Lucene.Net.Search.Sort(field); 
     TopFieldCollector collector = Lucene.Net.Search.TopFieldCollector.Create(sortByField, MaxSearchResultsReturned, false, false, false, false); 

     using (Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30)) 
     { 
      var queryParse = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, IndexFields.FullText, analyzer); 
      queryParse.AllowLeadingWildcard = true; 
      Query query = queryParse.Parse(searchText); 
      using (var searcher = new IndexSearcher(directory, true)) 
      { 
       searcher.Search(query, collector); 
       totalRows = collector.TotalHits; 
       TopDocs matches = collector.TopDocs(skip, take); 

       // convert results to known objects 

       var results = new List<SearchResult>(); 
       foreach (var item in matches.ScoreDocs) 
       { 
        int id = item.Doc; 
        Document doc = searcher.Doc(id); 
        SearchResult result = new SearchResult(); 
        result.ID = doc.GetField("ID").StringValue; 
        results.Add(result); 
       } 
      } 
     } 

       return results;