//--- 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;
 }
Exemple #3
0
 public SearchController(ISearchBL searchBL)
 {
     this._searchBL = searchBL;
 }
Exemple #4
0
 public SearchBLMock(ISearchBL instance)
 {
     _instance = instance;
 }
        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);
        }
Exemple #6
0
        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);
        }
Exemple #7
0
 //--- 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;
 }