2013-02-19 23 views
6

Tôi đang làm việc theo cách của mình thông qua lucene và được stumped về vấn đề này với các đối tượng Hits. Tôi có một Lucene.Net.Search sử dụng nhưng đối với một số lý do VS12 Express không thể tìm thấy đối tượng Hits vì vậy sau đây không biên dịch.Số lần truy cập Đối tượng không được chấp nhận trong Lucene.Net 3.03, làm cách nào để thay thế nó?

Trình biên dịch phàn nàn về dòng này

Hits hits = searcher.Search(booleanQuery, hits_limit); 

với thông báo lỗi sau

Lỗi 1 Loại hoặc namespace tên 'Hits' không thể được tìm thấy (là bạn thiếu một chỉ thị sử dụng hoặc một tham chiếu lắp ráp?)

Tôi không hiểu, theo hướng dẫn trực tuyến alk bạn cần là Lucnen.Ne t.Search

Bất kỳ Tư vấn

// validation 
if (subqueries.Count == 0) return new List<MATS_Doc>(); 
// set up lucene searcher 
Searcher searcher = new IndexSearcher(_directory, false); 
var hits_limit = 1000; 
var analyzer = new StandardAnalyzer(Version.LUCENE_30); 
BooleanQuery booleanQuery = new BooleanQuery(); 
foreach (Query fieldQuery in subqueries) 
{ 
    booleanQuery.Add(fieldQuery, Occur.SHOULD); 
} 
//var parser = new QueryParser(Version.LUCENE_30, searchField, analyzer); 
//var query = _parseQuery(searchQuery, parser); 
Hits hits = searcher.Search(booleanQuery, hits_limit); 
IEnumerable<MATS_Doc> results = _mapLuceneSearchResultsToDataList(hits, searcher); 
analyzer.Close(); 
searcher.Dispose(); 
return results; 

Trả lời

15

tôi sử dụng Lucene.net 3.0.3, và Search() trả về một TopDocs đối tượng, trong đó có một vài thuộc tính và một loạt các yếu tố ScoreDoc. Dưới đây là một ví dụ:

Lucene.Net.Search.TopDocs results = searcher.Search(booleanQuery, null, hits_limit); 


foreach(ScoreDoc scoreDoc in results.ScoreDocs){ 
    // retrieve the document from the 'ScoreDoc' object 
    Lucene.Net.Documents.Document doc = searcher.Doc(scoreDoc.Doc); 
    string myFieldValue = doc.get("myField"); 
} 
+0

Cảm ơn! là có anyway để có được toàn bộ tài liệu trở lại trong một shot như trái ngược với lĩnh vực của lĩnh vực? – TheCodeNovice

+0

dòng ** Lucene.Net.Documents.Document doc = searcher.Doc (scoreDoc.Doc); ** tìm nạp toàn bộ tài liệu. Sau đó, bạn có thể truy cập các trường của nó giống như tôi đã làm trong ví dụ của tôi, hoặc lặp qua chúng bằng cách sử dụng một cái gì đó như ** foreach (Lucene.Net.Documents.Field f trong doc.GetFields()) {Console.WriteLine ("field =" + f.Name + ", value =" + f.StringValue)} ** – mbarthelemy

+0

hoàn hảo! cảm ơn lần nữa – TheCodeNovice

Các vấn đề liên quan