2013-02-19 29 views
6

我正在通過lucene工作,並在Hits對象的這個問題上陷入困境。我有一個使用Lucene.Net.Search,但由於某些原因,VS12 Express無法找到Hits對象,因此以下內容無法編譯。點擊對象在Lucene.Net 3.03中棄用,我該如何替換它?

編譯器抱怨這條線

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

與以下錯誤消息

錯誤1類型或命名空間名稱「點擊」找不到(你 缺少using指令或裝配參考?)

我不明白,根據在線教程alk你需要的是Lucnen.Ne t.Search

任何建議

// 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; 

回答

15

我使用Lucene.net 3.0.3和搜索()返回一個TopDocs對象,其中包含一些屬性和ScoreDoc元件的陣列。這裏是一個例子:

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

謝謝!無論如何,要將整個文檔重新整理一次,而不是逐場進行? – TheCodeNovice 2013-02-19 21:26:38

+0

行** Lucene.Net.Documents.Document doc = searcher.Doc(scoreDoc.Doc); **提取整個文檔。然後你可以像我在我的例子中那樣訪問它的字段,或者使用類似於foreach的方法遍歷它們(doc.GetFields()中的Lucene.Net.Documents.Field f){Console.WriteLine(「field =」+ f.Name +「,value =」+ f.StringValue)} ** – mbarthelemy 2013-02-19 21:29:45

+0

完美!再次感謝 – TheCodeNovice 2013-02-19 21:31:56

相關問題