/// <summary> /// method to return the whole Lucene search index /// </summary> /// <returns></returns> public IEnumerable <LearningCourseDTO> GetAllIndexRecords() { // validate search index if (!System.IO.Directory.EnumerateFiles(_luceneDir).Any()) { return(new List <LearningCourseDTO>()); } // set up lucene searcher var searcher = new IndexSearcher(_directory, false); var reader = IndexReader.Open(_directory, false); var docs = new List <Document>(); var term = reader.TermDocs(); while (term.Next()) { docs.Add(searcher.Doc(term.Doc)); } reader.Dispose(); searcher.Dispose(); var mapper = new LearningCourseMapper(); return(mapper.MapLuceneToDataList(docs)); }
/// <summary> /// /// </summary> /// <param name="searchQuery"></param> /// <param name="searchField"></param> /// <returns></returns> public IEnumerable <LearningCourseDTO> GetSearchResults(string searchQuery, string searchField = "") { // validation if (string.IsNullOrEmpty(searchQuery.Replace("*", "").Replace("?", ""))) { return(new List <LearningCourseDTO>()); } // set up lucene searcher using (var searcher = new IndexSearcher(_directory, false)) { var hits_limit = 1000; var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30); //if one need to add new field to search: //var parser = new MultiFieldQueryParser //(Version.LUCENE_30, new[] { "Id", "Name", "Description", "NEW_FIELD" }, analyzer); // search by single field if (!string.IsNullOrEmpty(searchField)) { var parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, searchField, analyzer); var query = parseQuery(searchQuery, parser); var hits = searcher.Search(query, hits_limit).ScoreDocs; var mapper = new LearningCourseMapper(); var results = mapper.MapLuceneToDataList(hits, searcher); analyzer.Close(); searcher.Dispose(); return(results); } // search by multiple fields (ordered by RELEVANCE) else { var parser = new MultiFieldQueryParser (Lucene.Net.Util.Version.LUCENE_30, new[] { "Name", "Description" }, analyzer); var query = parseQuery(searchQuery, parser); var hits = searcher.Search (query, null, hits_limit, Sort.RELEVANCE).ScoreDocs; var mapper = new LearningCourseMapper(); var results = mapper.MapLuceneToDataList(hits, searcher); analyzer.Close(); searcher.Dispose(); return(results); } } }