Ich arbeite mich durch Lucene und war auf dieses Problem mit dem Hits-Objekt ratlos. Ich habe eine Verwendung von Lucene.Net.Search, aber aus irgendeinem Grund kann der VS12 Express das Hits-Objekt nicht finden, so dass der folgende Code nicht kompiliert werden kann.Hits Objekt in Lucene.Net 3.03 veraltet, wie ersetze ich es?
Der Compiler beschwert sich über diese Linie
Hits hits = searcher.Search(booleanQuery, hits_limit);
mit der folgenden Fehlermeldung
Fehler 1 Der Typ oder Namespace-Name ‚Hits‘ konnte nicht gefunden werden (sind Sie eine using-Direktive fehlt oder eine Assembly-Referenz?)
Ich verstehe es nicht, nach den Online-Tutorials Alk, die Sie brauchen, ist Lucnen.Ne t.Search
Jede Beratung
// 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;
Vielen Dank! Gibt es trotzdem eine Möglichkeit, das gesamte Dokument im Gegensatz zu Feld für Feld wieder auf einen Schlag zu bringen? – TheCodeNovice
die Zeile ** Lucene.Net.Documents.Document doc = searcher.Doc (scoreDoc.Doc); ** ruft das gesamte Dokument ab. Dann können Sie wie in meinem Beispiel auf seine Felder zugreifen oder sie mit Hilfe von etwas wie ** foreach (Lucene.Net.Documents.Field f in doc.GetFields()) {Console.WriteLine ("field =" +) durchlaufen f.Name + ", Wert =" + f.StringValue)} ** – mbarthelemy
perfekt! Danke noch einmal – TheCodeNovice