//--- Cosntructors --- public IndexRebuilder( IDekiChangeSink eventSink, UserBE currentUser, ISearchBL searchBL, IPageBL pageBL, ICommentBL commentBL, IAttachmentBL attachmentBL, IUserBL userBL, NS[] indexNameSpaceWhitelist, DateTime now ) { _eventSink = eventSink; _currentUser = currentUser; _searchBL = searchBL; _pageBL = pageBL; _commentBL = commentBL; _attachmentBL = attachmentBL; _userBL = userBL; _indexNameSpaceWhitelist = indexNameSpaceWhitelist; _now = now; }
public SearchBLMock(ISearchBL instance) { _instance = instance; }
public SearchController(ISearchBL searchBL) { this._searchBL = searchBL; }
private Yield CachedSearch(ISearchBL search, SearchQuery query, SetDiscriminator discriminator, bool explain, TrackingInfo trackingInfo, Result<XDoc> result) { if(query.IsEmpty) { yield return search.FormatResultSet(new SearchResult(), discriminator, false, null, new Result<XDoc>()) .Set(result.Return); yield break; } var searchResultSet = search.GetCachedQuery(query); if(!explain && searchResultSet != null && (trackingInfo == null || trackingInfo.QueryId.HasValue)) { // we can only use the cached result set if we either don't have trackingInfo or the trackInfo has a queryId. Otherwise we have to re-query. yield return search.FormatResultSet(searchResultSet, discriminator, false, trackingInfo, new Result<XDoc>()).Set(result.Return); yield break; } // get search results DreamMessage res = null; var lucene = DekiContext.Current.Deki.LuceneIndex.At("compact").With("wikiid", DekiContext.Current.Instance.Id); yield return lucene.With("q", query.LuceneQuery).GetAsync().Set(x => res = x); if(!res.IsSuccessful) { result.Return(new XDoc("documents").Attr("error", string.Format(DekiResources.ERROR_QUERYING_SEARCH_INDEX, query.Raw.EncodeHtmlEntities()))); yield break; } searchResultSet = search.CacheQuery(FilterResults(res.ToDocument()), query, trackingInfo); yield return search.FormatResultSet(searchResultSet, discriminator, explain, trackingInfo, new Result<XDoc>()) .Set(result.Return); }
private Yield CachedSearch(ISearchBL search, SearchQuery query, SetDiscriminator discriminator, bool explain, TrackingInfo trackingInfo, Result<XDoc> result) { if(query.IsEmpty) { yield return search.FormatResultSet(new SearchResult(), discriminator, false, null, new Result<XDoc>()) .Set(result.Return); yield break; } var searchResultSet = search.GetCachedQuery(query); if(!explain && searchResultSet != null && (trackingInfo == null || trackingInfo.QueryId.HasValue)) { // we can only use the cached result set if we either don't have trackingInfo or the trackInfo has a queryId. Otherwise we have to re-query. yield return search.FormatResultSet(searchResultSet, discriminator, false, trackingInfo, new Result<XDoc>()).Set(result.Return); yield break; } // get search results DreamMessage msg = null; var context = DekiContext.Current; var searchPlug = context.Deki.LuceneIndex .At("compact") .With("q", query.LuceneQuery) .With("wikiid", context.Instance.Id); if(!DekiContext.Current.IsValidApiKeyInRequest) { searchPlug = searchPlug .With("userid", context.User.ID) .With("apiuri", Self.Uri.AsPublicUri().ToString()); } yield return searchPlug .Get(new Result<DreamMessage>()) .Set(x => msg = x); if(!msg.IsSuccessful) { var resources = context.Resources; result.Return(new XDoc("documents").Attr("error", resources.Localize(DekiResources.ERROR_QUERYING_SEARCH_INDEX(query)))); yield break; } searchResultSet = search.CacheQuery(msg.ToDocument(), query, trackingInfo); yield return search.FormatResultSet(searchResultSet, discriminator, explain, trackingInfo, new Result<XDoc>()) .Set(result.Return); }