public Result Search(N2.Persistence.Search.Query query) { if (!query.IsValid()) { return(Result.Empty); } var s = accessor.GetSearcher(); try { var q = CreateQuery(query); var hits = s.Search(q, query.SkipHits + query.TakeHits); var result = new Result(); result.Total = hits.totalHits; var resultHits = hits.scoreDocs.Skip(query.SkipHits).Take(query.TakeHits).Select(hit => { var doc = s.Doc(hit.doc); int id = int.Parse(doc.Get("ID")); ContentItem item = persister.Get(id); return(new Hit { Content = item, Score = hit.score }); }).Where(h => h.Content != null).ToList(); result.Hits = resultHits; result.Count = resultHits.Count; return(result); } finally { //s.Close(); } }
public Result <T> Search(N2.Persistence.Search.Query query) { if (!query.IsValid()) { logger.Warn("Invalid query"); return(Result <T> .Empty); } var luceneQuery = query.ToLuceneQuery(); logger.Warn("Prepared lucene query " + luceneQuery); var q = accessor.GetQueryParser().Parse(luceneQuery); var s = accessor.GetSearcher(); TopDocs hits; if (string.IsNullOrEmpty(query.SortField)) { hits = s.Search(q, query.SkipHits + query.TakeHits); } else { hits = s.Search( query: q, filter: null, n: query.SkipHits + query.TakeHits, sort: new Sort( query.SortFields.Select( field => new SortField(field.SortField, GetSortFieldType(field.SortField), field.SortDescending)).ToArray())); } return(CreateResults(query, s, hits)); }
public Result Search(N2.Persistence.Search.Query query) { if (!query.IsValid()) { return(Result.Empty); } var s = accessor.GetSearcher(); try { var q = CreateQuery(query); //new TopFieldDocCollector(s.GetIndexReader(), new Sort( TopDocs hits; if (string.IsNullOrEmpty(query.SortField)) { hits = s.Search(q, query.SkipHits + query.TakeHits); } else { hits = s.Search( query: q, filter: null, n: query.SkipHits + query.TakeHits, sort: new Sort( query.SortFields.Select( field => new SortField(field.SortField, GetSortFieldType(field.SortField), field.SortDescending)).ToArray())); } var result = new Result(); result.Total = hits.TotalHits; var resultHits = hits.ScoreDocs.Skip(query.SkipHits).Take(query.TakeHits).Select(hit => { var doc = s.Doc(hit.Doc); int id = int.Parse(doc.Get("ID")); ContentItem item = persister.Get(id); return(new Hit { Content = item, Score = hit.Score }); }).Where(h => h.Content != null).ToList(); result.Hits = resultHits; result.Count = resultHits.Count; return(result); } finally { //s.Close(); } }