public IEnumerable <Person> GetAll(out int totalResults, int page = 0, int pageSize = 20) { SearchResults <SearchResultItem> results; using (IProviderSearchContext searchContext = _index.CreateSearchContext()) { results = GetBaseQueryable <SearchResultItem>(searchContext) .OrderBy(i => i.Name) .Page(page, pageSize) .GetResults(); } totalResults = results.TotalSearchResults; return(AsPersons(results)); }
public void Items_IndexHaveNonexistentItems_ReturnsExistentItems([Content] DbItem[] contentItems, DbItem brokenItem, List <DbItem> indexedItems, ISearchIndex index, string indexName, [Frozen] SearchProvider searchProvider, Switcher <SearchProvider> searchProviderSwitcher, [Content] Item renderingItem, IRenderingPropertiesRepository renderingPropertiesRepository) { //arrange indexedItems.AddRange(contentItems); indexedItems.Add(brokenItem); renderingPropertiesRepository.Get <QueryableDatasourceRenderingSettings>() .Returns(new QueryableDatasourceRenderingSettings { SearchResultsLimit = 10 }); var results = GetResults(indexedItems); InitIndexes(index, searchProvider, results); var renderingModel = new QueryableDatasourceRenderingModel(renderingPropertiesRepository) { DatasourceString = "notEmpty" }; //act var items = renderingModel.Items.ToArray(); //assert items.Count().Should().Be(contentItems.Length); index.CreateSearchContext().ReceivedWithAnyArgs(1); }
public void Items_ItemTemplateSet_FiltersByTemplateId(Db db, [Content] DbTemplate templateItem, [Content] DbItem[] contentItems, ISearchIndex index, [Frozen] SearchProvider searchProvider, Switcher <SearchProvider> searchProviderSwitcher, string indexName, [Content] Item renderingItem, IRenderingPropertiesRepository renderingPropertiesRepository) { //arrange var dbItem = new DbItem("templated", ID.NewID, templateItem.ID); db.Add(dbItem); var dbItems = contentItems.ToList(); dbItems.Add(dbItem); var results = GetResults(dbItems); renderingPropertiesRepository.Get <QueryableDatasourceRenderingSettings>() .Returns(new QueryableDatasourceRenderingSettings { SearchResultsLimit = 10 }); InitIndexes(index, searchProvider, results); var renderingModel = new QueryableDatasourceRenderingModel(renderingPropertiesRepository) { Rendering = new Rendering(), DatasourceString = "notEmpty", DatasourceTemplate = db.GetItem(templateItem.ID) }; //act var items = renderingModel.Items; //assert items.Count().Should().Be(1); index.CreateSearchContext().ReceivedWithAnyArgs(1); }
public string AutoComplete(string querytext) { var indexName = String.Format("sitecore_{0}_index", Sitecore.Context.Database.Name); ISearchIndex index = ContentSearchManager.GetIndex(indexName); var tID = new ID("{766464BE-12CA-4441-8DF2-2D3865B57B23}"); List <string> Listtm = new List <string>(); using (IProviderSearchContext context = index.CreateSearchContext()) { var query = context.GetQueryable <TestModel>();//.Where(x => x.title.Contains("News")); query = query.Filter(x => x.TemplateId == tID); var results = query.GetResults(); var finalresult = results.Hits.Select(h => GetSiteCoreItem(h.Document.ItemId)).ToArray(); foreach (var Item in finalresult) { JsonModel tm = new JsonModel(); Listtm.Add(Item.Fields["title"].ToString()); // tm.title = Item.Fields["title"].ToString(); // Listtm.Add(tm); } } return(JsonConvert.SerializeObject(Listtm)); }
public void Items_DifferentItemLanguageExists_ReturnsOnlyContextLanguage([Content] DbItem[] contentItems, ISearchIndex index, [Frozen] SearchProvider searchProvider, Switcher <SearchProvider> searchProviderSwitcher, [Content] Item renderingItem, IRenderingPropertiesRepository renderingPropertiesRepository) { //arrange var results = GetResults(contentItems).ToArray(); results.First().Language = "noncontext"; renderingPropertiesRepository.Get <QueryableDatasourceRenderingSettings>() .Returns(new QueryableDatasourceRenderingSettings { SearchResultsLimit = 10 }); InitIndexes(index, searchProvider, results.AsQueryable()); var renderingModel = new QueryableDatasourceRenderingModel(renderingPropertiesRepository) { DatasourceString = "notEmpty" }; //act var items = renderingModel.Items; //assert items.Count().Should().Be(contentItems.Length - 1); index.CreateSearchContext().ReceivedWithAnyArgs(1); }
public static Author GetAuthorByName(Item currentItem, string authorName) { try { BlogSettings settingsItem = General.DataManager.GetBlogSettingsItem(currentItem); ISearchIndex index = ContentSearchManager.GetIndex(new SitecoreIndexableItem(settingsItem.AuthorFolder)); using (IProviderSearchContext context = index.CreateSearchContext()) { Expression <Func <SearchResultItem, bool> > predicate = PredicateBuilder.True <SearchResultItem>(); predicate = predicate.And(item => item.TemplateId == ID.Parse(Author.AuthorTemplateId) && item.Paths.Contains(settingsItem.AuthorFolder.ID)); predicate = predicate.And(c => c[Author.AuthorFullNameField] == authorName); IQueryable <SearchResultItem> results = context.GetQueryable <SearchResultItem>().Where(predicate).OrderBy(t => t.Name); if (results.Any()) { return(results.FirstOrDefault().GetItem().CreateAs <Author>()); } } } catch (Exception ex) { Log.Error("XBlog GetCategory error", ex, new object()); } return(null); }
public void Items_NotLatestItemVersionExists_ReturnsOnlyLatestItems([Content] DbItem[] contentItems, ISearchIndex index, [ReplaceSearchProvider] SearchProvider searchProvider, [Content] Item renderingItem, IRenderingPropertiesRepository renderingPropertiesRepository) { //arrange var results = GetResults(contentItems).ToArray(); results.First().IsLatestVersion = false; renderingPropertiesRepository.Get <QueryableDatasourceRenderingSettings>() .Returns(new QueryableDatasourceRenderingSettings { SearchResultsLimit = 10 }); InitIndexes(index, searchProvider, results.AsQueryable()); var renderingModel = new QueryableDatasourceRenderingModel(renderingPropertiesRepository) { DatasourceString = "notEmpty" }; //act var items = renderingModel.Items; //assert items.Count().Should().Be(contentItems.Length - 1); index.CreateSearchContext().ReceivedWithAnyArgs(1); }
public IPagedList <TextSearchResultModel> GetPage(string searchText, int pageNum, int pageSize, Item siteRoot) { var indexable = new SitecoreIndexableItem(siteRoot); ISearchIndex index = ContentSearchManager.GetIndex(indexable); using (var context = index.CreateSearchContext()) { var slop = 0.0f; var headingBoost = 1.0f; var copyBoost = 0.9f; var summaryBoost = 0.8f; var descriptionBoost = 0.8f; var keywordsBoost = 0.7f; IQueryable <TextSearchResultModel> query = context.GetQueryable <TextSearchResultModel>(); query = query .Filter(i => i.Language == siteRoot.Language.Name) .Filter(i => i.Paths.Contains(siteRoot.ID)) .Filter(i => !i.Name.StartsWith("_")) .Where(i => i.Heading.Like(searchText, slop).Boost(headingBoost) || i.Copy.Like(searchText, slop).Boost(copyBoost) || i.Summary.Like(searchText, slop).Boost(summaryBoost) || i.Description.Like(searchText, slop).Boost(descriptionBoost) || i.Keywords.Like(searchText, slop).Boost(keywordsBoost) || i.AggregateText.Like(searchText, slop)); return(query.ToPagedList(pageNum, pageSize)); } }
public new IEnumerable <TestingSearchResultItem> GetRunningTestsWithDataSourceItem(Item dataSourceItem) { ISearchIndex testingSearchIndex = GetTestingSearchIndex(); if (testingSearchIndex == null) { return(Enumerable.Empty <Models.TestingSearchResultItem>()); } using (IProviderSearchContext providerSearchContext = testingSearchIndex.CreateSearchContext(SearchSecurityOptions.DisableSecurityCheck)) { Expression <Func <Models.TestingSearchResultItem, bool> > predicate = PredicateBuilder.True <Models.TestingSearchResultItem>(); predicate = AddDatesSearchCriteria(predicate); predicate = AddDefaultSearchCriteria(predicate); // Querying our new field that is TriState compatible predicate = predicate.And((Models.TestingSearchResultItem x) => x.IsRunningString == "1"); // https://doc.sitecore.com/developers/90/platform-administration-and-architecture/en/support-reference-for-azure-search.html // Quote: You must not apply queries such as StartsWith, Contains to fields with of type EDM.String that contain paths (such as /sitecore/content/home) or collections of GUIDs. // This is because Azure Search matches regular expression searches to single words. // // Alright then we must fix this. DataSourceItems contains path like content... // "datasourceitems_s": "sitecore://{B765C5DD-E0AD-4D91-BA63-B082656ED909}?lang=en&ver=1|sitecore://{C547CF9A-D9CC-42D7-A1D5-B14AB9BBD870}?lang=en&ver=1" // Therefore I introduced a new field with a propper value in it that won't need any special escape characters string dataSourceId = dataSourceItem.ID.ToShortID().ToString().Replace("-", string.Empty); predicate = predicate.And((Models.TestingSearchResultItem x) => x.DataSourceItemsTidy.Contains(dataSourceId)); var result = providerSearchContext.GetQueryable <Models.TestingSearchResultItem>().Where(predicate).ToArray(); return(result); } }
private UrlString GetRedirectUrl(Uri returnUrl) { // NOTE [ILs] Don't redirect to absolute uris for redirectUrl after login, this may be a nefarious attempt to steal user information string result = returnUrl != null && returnUrl.IsAbsoluteUri ? string.Empty : returnUrl?.OriginalString; if (string.IsNullOrWhiteSpace(result)) { SearchResultItem searchResult; using (IProviderSearchContext searchContext = _searchIndex.CreateSearchContext()) { searchResult = searchContext.GetQueryable <SearchResultItem>() .FirstOrDefault( i => i.Paths.Contains(_siteRoot) && i.TemplateId == Templates.LoginSettings.Id); } Item loginSettingsItem = searchResult?.GetItem(); if (loginSettingsItem != null) { LinkField linkField = loginSettingsItem.Fields[Templates.LoginSettings.Fields.PostLoginRedirect]; Item targetItem = linkField.TargetID != (ID)null && linkField.TargetID != ID.Null ? _db.GetItem(linkField.TargetID) : null; result = targetItem != null?LinkManager.GetItemUrl(targetItem) : null; } } return(new UrlString(result ?? "/")); }
public new IEnumerable <TestingSearchResultItem> GetRunningTestsInAllLanguages(Item hostItem) { Assert.ArgumentNotNull(hostItem, "hostItem"); ISearchIndex testingSearchIndex = GetTestingSearchIndex(); if (testingSearchIndex == null) { return(Enumerable.Empty <Models.TestingSearchResultItem>()); } List <Models.TestingSearchResultItem> list = new List <Models.TestingSearchResultItem>(); using (IProviderSearchContext providerSearchContext = testingSearchIndex.CreateSearchContext(SearchSecurityOptions.DisableSecurityCheck)) { Expression <Func <Models.TestingSearchResultItem, bool> > first = PredicateBuilder.True <Models.TestingSearchResultItem>(); Language[] languages = hostItem.Languages; foreach (Language language in languages) { Item itemInLanguage = hostItem.Database.GetItem(hostItem.ID, language); // This is de wrong implementation because it only focusses on if the current item is the initiator/host of the test. first = first.Or((Models.TestingSearchResultItem x) => x.HostItemPartial == FieldFormattingHelper.FormatUriForSearch(itemInLanguage)); // It should focus on if the current item is subject of the actual test. string dataSourceId = itemInLanguage.ID.ToShortID().ToString().Replace("-", string.Empty); first = first.Or((Models.TestingSearchResultItem x) => x.DataSourceItemsTidy.Contains(dataSourceId)); } // Querying our new field that is TriState compatible first = first.And((Models.TestingSearchResultItem x) => x.IsRunningString == "1"); list.AddRange(providerSearchContext.GetQueryable <Models.TestingSearchResultItem>().Where(first).ToArray()); return(list); } }
public void ShouldGetFreeProducts( SearchRepository sut, ISearchIndex searchIndex, IIndexable indexable, [Frozen]SearchProvider provider, Switcher<SearchProvider> switcher) { // arrange searchIndex .CreateSearchContext() .GetQueryable<ProductSearchResultItem>() .Returns(new[] { new ProductSearchResultItem { Free = true }, new ProductSearchResultItem { Free = false }, new ProductSearchResultItem { Free = true } }.AsQueryable()); ContentSearchManager.SearchConfiguration.Indexes["indexName"] = searchIndex; provider.GetContextIndexName(indexable, Arg.Any<ICorePipeline>()).Returns("indexName"); // act var products = sut.GetProducts(indexable); // assert Assert.Equal(2, products.Count()); }
private List<Item> GetLinkedSitecoreItems(string gcId) { var result = new List<Item>(); ISearchIndex index = ContentSearchManager.Indexes.SingleOrDefault(i => i.Name.Equals(IndexName)); if (index == null) { Log.Warn("Index " + IndexName + " not found!", this); return result; } using (IProviderSearchContext context = index.CreateSearchContext()) { var query = context.GetQueryable<SearchResultItem>() .Where(i => i.Path.StartsWith("/sitecore/content/") && i["gc_content_id"] == gcId ); query = query.Filter(i => i.Language == Context.Language.Name); var res = query.GetResults(); if (res.TotalSearchResults == 0) { return result; } result = res.Hits .Select(h => h.Document.GetItem()) .Where(i => i != null) .ToList(); return result; } }
public IEnumerable <Suggestion> GetSuggestions(SuggesterModel model, out XA.Foundation.Search.Timer queryTimer, out string indexName) { bool fuzzy = Configuration.Settings.GetBoolSetting("AzureSearchSuggesterFuzzy", false); bool highlights = Configuration.Settings.GetBoolSetting("AzureSearchSuggesterHighlight", false); ISearchIndex searchIndex = IndexResolver.ResolveIndex(!model.ContextItemID.IsNull ? ContentRepository.GetItem(model.ContextItemID) : null); indexName = searchIndex.Name; searchIndex.Initialize(); using (IProviderSearchContext searchContext = searchIndex.CreateSearchContext(SearchSecurityOptions.Default)) { SuggestParameters sp = new SuggestParameters() { UseFuzzyMatching = fuzzy, Top = 5 }; if (highlights) { string tag = Configuration.Settings.GetSetting("AzureSearchSuggesterHighlightTag"); sp.HighlightPreTag = $"<{tag}>"; sp.HighlightPostTag = $"</{tag}>"; } AzureSuggestQuery term = model.Term; DocumentSuggestResult <Document> handlerQueryResults; using (queryTimer = new XA.Foundation.Search.Timer()) handlerQueryResults = searchContext.Suggest(term, Configuration.Settings.GetSetting("AzureSearchSuggesterName"), sp); return(handlerQueryResults.Results.Select(a => new Suggestion() { Term = a.Text, Payload = JsonConvert.SerializeObject(a.Document) })); } }
public void Items_ItemTemplateSet_FiltersByTemplateId(Db db, [Content] DbTemplate templateItem, [Content] DbItem[] contentItems, ISearchIndex index, [ReplaceSearchProvider] SearchProvider searchProvider, string indexName, [Content] Item renderingItem) { //arrange var dbItem = new DbItem("templated", ID.NewID, templateItem.ID); db.Add(dbItem); var dbItems = contentItems.ToList(); dbItems.Add(dbItem); var results = GetResults(dbItems); InitIndexes(index, searchProvider, results); var renderingModel = new QueryableDatasourceRenderingModel() { Rendering = new Rendering() { DataSource = "notEmpty" } }; renderingModel.DatasourceTemplate = db.GetItem(templateItem.ID); //act var items = renderingModel.Items; //assert items.Count().Should().Be(1); index.CreateSearchContext().ReceivedWithAnyArgs(1); }
public static IEnumerable <BlogPost> GetBlogPostsMK([NotNull] Item blogRoot, int startRowIndex, int maximumRows, bool descending) { try { ISearchIndex index = ContentSearchManager.GetIndex(new SitecoreIndexableItem(blogRoot)); using (IProviderSearchContext context = index.CreateSearchContext()) { Expression <Func <SearchResultItem, bool> > predicate = GetBlogItemsQueryPredicate(blogRoot); if (descending) { //.Slice(startRowIndex, maximumRows) return(context.GetQueryable <SearchResultItem>().Where(predicate) .OrderByDescending(result => result["TODO REPLACE THIS WITH THE PUBLISH DATE FIELD THAT LUCENE HAS"]) .CreateAs <BlogPost>()); } else { return(context.GetQueryable <SearchResultItem>().Where(predicate) .OrderBy(result => result["TODO REPLACE THIS WITH THE PUBLISH DATE FIELD THAT LUCENE HAS"]) .CreateAs <BlogPost>()); } } } catch (Exception ex) { Log.Error("XBlog GetBlogPosts error", ex, new object()); } return(Enumerable.Empty <BlogPost>()); }
public void ShouldGetFreeProducts( SearchRepository sut, ISearchIndex searchIndex, IIndexable indexable, [Frozen] SearchProvider provider, Switcher <SearchProvider> switcher) { // arrange searchIndex .CreateSearchContext() .GetQueryable <ProductSearchResultItem>() .Returns(new[] { new ProductSearchResultItem { Free = true }, new ProductSearchResultItem { Free = false }, new ProductSearchResultItem { Free = true } }.AsQueryable()); ContentSearchManager.SearchConfiguration.Indexes["indexName"] = searchIndex; provider.GetContextIndexName(indexable, Arg.Any <ICorePipeline>()).Returns("indexName"); // act var products = sut.GetProducts(indexable); // assert Assert.Equal(2, products.Count()); }
public void Items_IndexHaveNonexistentItems_ReturnsExistentItems([Content] DbItem[] contentItems, DbItem brokenItem, List <DbItem> indexedItems, ISearchIndex index, string indexName, [ReplaceSearchProvider] SearchProvider searchProvider, [Content] Item renderingItem) { //arrange indexedItems.AddRange(contentItems); indexedItems.Add(brokenItem); var results = GetResults(indexedItems); InitIndexes(index, searchProvider, results); var renderingModel = new QueryableDatasourceRenderingModel() { Rendering = new Rendering() { DataSource = "notEmpty" } }; //act var items = renderingModel.Items.ToArray(); //assert items.Count().Should().Be(contentItems.Length); index.CreateSearchContext().ReceivedWithAnyArgs(1); }
public static IEnumerable <string> GetAllFieldValues(this ISearchIndex index, string fieldName) { using (var context = index.CreateSearchContext()) { var termsByFieldName = context.GetTermsByFieldName((fieldName ?? "").ToLowerInvariant(), null); return(termsByFieldName .Select(x => x.Term) .ToArray()); } }
public List <ProductSearchItem> GetProducts(ID templateId) { //var predicate = PredicateBuilder.True<Brand>() // .And(p => p.TemplateId == templateId) // .And(p => !p.Name.Equals("__Standard Values")); ////.And(p => p.Language == Context.Language.Name); //var results = GetSolrResult(predicate).ToList(); //return results; List <ProductSearchItem> ProductResultItems = new List <ProductSearchItem>(); //var language = Sitecore.Context.Language.CultureInfo.TwoLetterISOLanguageName.ToString(); //var index = ContentSearchManager.GetIndex("sitecore_web_index"); //using (var context = index.CreateSearchContext()) //{ // var predicate = PredicateBuilder.True<SearchResultItem>(); // predicate = predicate.And((p => p.TemplateId == templateId)); // // predicate = predicate.And((p => p.Language == language)); // var results = context.GetQueryable<SearchResultItem>().Where(predicate).ToList(); //} ISearchIndex indexbrand = ContentSearchManager.GetIndex("website_custom_product"); using (IProviderSearchContext context = indexbrand.CreateSearchContext()) { System.Linq.Expressions.Expression <Func <Library.SC.Lucene.ProductSearchItem, bool> > predicate = PredicateBuilder.True <Library.SC.Lucene.ProductSearchItem>(); predicate = predicate.And(p => p._language.Equals(Garnier.Library.SC.Utility.Extensions.currentContextLanguage())); predicate = predicate.And(p => p.TemplateId == Lookups.TemplateProductID); ProductResultItems = context.GetQueryable <Library.SC.Lucene.ProductSearchItem>() .Where(predicate) .ToList(); } if (ProductResultItems != null && ProductResultItems.Count > 0) { //List<Sitecore.Data.Items.Item> ResultItems = new List<Sitecore.Data.Items.Item>(); //foreach (Library.SC.Lucene.BrandSearchItem ProductResultItem in ProductResultItems) //{ // Sitecore.Data.Items.Item thisItem = ProductResultItem.GetContextItem(ResultItems); // if (thisItem != null && thisItem.itemIsValid() && (thisItem.itemHasValidChildren())) // { // ResultItems.Add(thisItem); // } //} //return ResultItems; return(ProductResultItems); } else { return(new List <Library.SC.Lucene.ProductSearchItem>()); } //return list; }
public static Dictionary <string, int> GetTagCloud(Item currentItem) { Dictionary <string, int> tagItems = new Dictionary <string, int>(); try { Item repositorySearchItem = XBlog.General.DataManager.GetBlogHomeItem(currentItem); BlogSettings settingsItem = XBlog.General.DataManager.GetBlogSettingsItem(currentItem); ISearchIndex index = ContentSearchManager.GetIndex(new SitecoreIndexableItem(settingsItem.AuthorFolder)); using (IProviderSearchContext context = index.CreateSearchContext()) { // look at the pipe seperated list. break them out and loop through. Build dictionary based on Ids // create as blog post item // could even pass a max item as a dictionary definition Expression <Func <SearchResultItem, bool> > predicate = PredicateBuilder.True <SearchResultItem>(); predicate = predicate.And(item => item.TemplateName == BlogPost.BlogPostTemplate && item.Paths.Contains(repositorySearchItem.ID)); IEnumerable <BlogPostTagString> resultList = context.GetQueryable <SearchResultItem>().Where(predicate).CreateAs <BlogPostTagString>(); List <ID> listIDs = context.GetQueryable <SearchResultItem>().Where(predicate).Select(result => result.ItemId).ToList(); tagItems.Add("max", 0); foreach (BlogPostTagString item in resultList) { char[] delimiterChars = { '|' }; string[] itemIDs = item.TagString.Split(delimiterChars); foreach (string itemID in itemIDs) { if (tagItems.ContainsKey(itemID)) { tagItems[itemID] += 1; } else { tagItems.Add(itemID, 1); } if (tagItems[itemID] > tagItems["max"]) { tagItems["max"] = tagItems[itemID]; } } } } } catch (Exception ex) { Log.Error("XBlog GetTagCloud error", ex, new object()); } return(tagItems); }
private List <SearchResultItem> GetRecommendedRenderingItems() { ISearchIndex index = ContentSearchManager.GetIndex("sitecore_master_index"); using (IProviderSearchContext context = index.CreateSearchContext()) { var results = context.GetQueryable <SearchResultItem>() .Where(x => x.TemplateId.Guid == Templates.AvailableRenderings.Id.Guid && x.Name == Constants.Values.RecommendedRenderingsItemName); return(results.ToList()); } }
public static IEnumerable <string> GetSearchTerms(this ISearchIndex index, string prefix = "") { using (var context = index.CreateSearchContext()) { var termsByFieldName = context.GetTermsByFieldName("_content", prefix) .Union(context.GetTermsByFieldName("tagname", prefix)) .Union(context.GetTermsByFieldName("displayname", prefix)); return(termsByFieldName .OrderByDescending(x => x.DocumentFrequency) .Select(x => x.Term) .Distinct() .ToArray()); } }
/// <summary> /// Requires the following field to be patched in: <field fieldName="_templates" returnType="string" type="Sitecore.ContentSearch.ComputedFields.AllTemplates, Sitecore.ContentSearch" deep="true" includeStandardTemplate="false" /> /// </summary> /// <param name="index">The search index to search within.</param> /// <returns></returns> protected IEnumerable <Item> GetSpeedyPagesByTemplate(ISearchIndex index) { using (var searchContext = index.CreateSearchContext()) { var speedyPages = searchContext.GetQueryable <AllTemplatesSearchResultItem>().Where(x => x.ItemBaseTemplates.Contains(SpeedyConstants.TemplateIDs.SpeedyPageTemplateId)); if (!speedyPages.Any()) { return(new List <Item>()); } var sitecoreItems = speedyPages.Select(x => x.GetItem()).ToList().Where(y => y.IsEnabled(Fields.SpeedyEnabled)); return(sitecoreItems.ToList()); } }
public IEnumerable <Sitecore.Data.Items.Item> BasicSearch(string querytext) { var indexName = String.Format("sitecore_{0}_index", Sitecore.Context.Database.Name); ISearchIndex index = ContentSearchManager.GetIndex(indexName); var tID = new ID("{766464BE-12CA-4441-8DF2-2D3865B57B23}"); using (IProviderSearchContext context = index.CreateSearchContext()) { var query = context.GetQueryable <TestModel>().Where(x => x.description.Contains(querytext)); query = query.Filter(x => x.TemplateId == tID); var results = query.GetResults(); return(results.Hits.Select(h => GetSiteCoreItem(h.Document.ItemId)).ToArray()); } }
public void Items_EmptyDatasource_ReturnsEmptyCollection([ResolvePipeline("getRenderingDatasource")] EmptyPipeline processor, List <DbItem> indexedItems, SearchProvider searchProvider, ISearchIndex index, string indexName, [Content] Item renderingItem) { //arrange InitIndexes(index, searchProvider, new List <SearchResultItem>().AsQueryable()); var renderingModel = new QueryableDatasourceRenderingModel(); //act var items = renderingModel.Items; //assert items.Count().Should().Be(0); index.CreateSearchContext().DidNotReceiveWithAnyArgs(); }
public Facets GetFacets(ISearchIndex index, string search) { if (search == null) { search = string.Empty; } int contentLength = 0; var renderings = PageContext.CurrentOrNull.PageDefinition.Renderings; if (renderings != null) { foreach (var rendering in renderings) { if (rendering.Parameters["ContentBodyMaxLength"] != null) { int.TryParse(rendering.Parameters["ContentBodyMaxLength"], out contentLength); } } } using (var context = index.CreateSearchContext()) { var found = context.GetQueryable <EventDetails>().Where(j => j.Name.Contains(search)); if (contentLength > 0) { found = found.Where(j => j.ComputedContentLength <= contentLength); } var result = found.FacetOn(j => j.Duration, 1).GetResults(); var durations = result.Facets.Categories[0].Values. Select(f => new Facet() { Name = f.Name, Count = f.AggregateCount }); result = found.FacetOn(j => j.DifficultyLevel, 1).GetResults(); var diffLevels = result.Facets.Categories[0].Values. Select(f => new Facet() { Name = f.Name, Count = f.AggregateCount }); return(new Facets() { DurationFacets = durations.OrderByDescending(i => i.Count).ThenBy(i => i.Name).ToList(), DifficultyFacets = diffLevels.OrderByDescending(i => i.Count).ThenBy(i => i.Name).ToList() }); } }
public void Items_IndexMatchDb_ReturnsAllItems([Content] DbItem[] contentItems, ISearchIndex index, [ReplaceSearchProvider] SearchProvider searchProvider, [Content] Item renderingItem) { //arrange var results = GetResults(contentItems); InitIndexes(index, searchProvider, results); var renderingModel = new QueryableDatasourceRenderingModel() { Rendering = new Rendering() { DataSource = "notEmpty" } }; //act var items = renderingModel.Items; //assert items.Count().Should().Be(contentItems.Length); index.CreateSearchContext().ReceivedWithAnyArgs(1); }
public void GetSearchResult_ItemsWithDifferentProperties_ReturnItemsFulfillingPredicate( ISearchQueryElementProvider elementProvider, IIndexNameProvider indexNameProvider, ISearchQueryPredicateBuilder <TestIndexableEntity> predicateBuilder, ISearchIndex searchIndex, [Frozen] SearchProvider provider, Switcher <SearchProvider> switcher) { // Arrange elementProvider .GetSearchQueryElementRoot <TestIndexableEntity>() .Returns(new SearchQueryGrouping <TestIndexableEntity>(LogicalOperator.And)); indexNameProvider .IndexName .Returns("predicateTestIndex"); predicateBuilder .GetOutput() .Returns(x => x.Name.Contains("F")); var queryable = new QueryProviderStub <TestIndexableEntity>(new[] { CreateTestIndexableEntity("Faucet", paths: new List <ID> { ItemIDs.ContentRoot }), CreateTestIndexableEntity("Clamp", paths: new List <ID> { ItemIDs.ContentRoot }) }.AsQueryable()); searchIndex .CreateSearchContext() .GetQueryable <TestIndexableEntity>() .Returns(queryable); ContentSearchManager.SearchConfiguration.Indexes[indexNameProvider.IndexName] = searchIndex; var sut = new SearchResultRepository <TestIndexableEntity>(elementProvider, indexNameProvider, predicateBuilder); // Act var actual = sut.GetSearchResult(new SearchCriteria()); // Assert actual.TotalSearchResults.ShouldBeEquivalentTo(1); actual.Hits.First().Name.Should().Contain("F"); }
public void Items_NotLatestItemVersionExists_ReturnsOnlyLatestItems([Content] DbItem[] contentItems, ISearchIndex index, [ReplaceSearchProvider] SearchProvider searchProvider, [Content] Item renderingItem) { //arrange var results = GetResults(contentItems).ToArray(); results.First().IsLatestVersion = false; InitIndexes(index, searchProvider, results.AsQueryable()); var renderingModel = new QueryableDatasourceRenderingModel() { Rendering = new Rendering() { DataSource = "notEmpty" } }; //act var items = renderingModel.Items; //assert items.Count().Should().Be(contentItems.Length-1); index.CreateSearchContext().ReceivedWithAnyArgs(1); }
public List <Item> GetSearchResultsUsingQuery(string searchString) { //Getting index from the web.config List <Item> returnValues = new List <Item>(); SearchIndexName = StringUtil.GetString(SearchIndexName, CommonText.get("Search Index"));; ISearchIndex searchIndex = null; try { searchIndex = ContentSearchManager.GetIndex(SearchIndexName); } catch (Exception ex) { Log.Error(ex.Message, ex); return(null); } using (var context = searchIndex.CreateSearchContext()) { IQueryable <SearchUIResultItem> q = context.GetQueryable <SearchUIResultItem>(); List <SearchResults <SearchUIResultItem> > LstResults = new List <SearchResults <SearchUIResultItem> >(); // //Query approach q = BuildSearchQuery(searchString, q); LstResults.Add(q.GetResults()); List <string> uniqueIds = new List <string>(); foreach (var results in LstResults) { var sitecoreItem = results.Hits.Select(x => x.Document); foreach (var item in sitecoreItem) { Item item1 = item.GetItem(); if (item1 != null && !uniqueIds.Contains(item1.ID.ToString())) { returnValues.Add(item1); uniqueIds.Add(item1.ID.ToString()); } } } return(returnValues); } }
public IEnumerable <Pet> rpSubnavigation_GetData() { string indexName = $"sitecore_{Sitecore.Context.Database.Name.ToLower()}_index"; ISearchIndex index = ContentSearchManager.GetIndex(indexName); using (var context = index.CreateSearchContext()) { var querable = context.GetQueryable <Pet>().Where(x => x.Paths.Contains(Sitecore.Context.Item.ID) && x.TemplateName.Equals("Pet")).OrderBy(x => x.CreatedDate); var results = querable.GetResults(); if (results.Hits.Any()) { return(results.Hits.Select(x => x.Document).ToList()); } } return(new List <Pet>()); }
public void GetSearchResult_ItemsWithDiffentVersions_ReturnItemsWithLatestVersion( ISearchQueryElementProvider elementProvider, IIndexNameProvider indexNameProvider, ISearchQueryPredicateBuilder <TestIndexableEntity> predicateBuilder, ISearchIndex searchIndex, [Frozen] SearchProvider provider, Switcher <SearchProvider> switcher) { // Arrange indexNameProvider .IndexName .Returns("languageTestIndex"); predicateBuilder .GetOutput() .Returns(x => true); var queryable = new QueryProviderStub <TestIndexableEntity>(new[] { CreateTestIndexableEntity("Faucet", paths: new List <ID> { ItemIDs.ContentRoot }, latestVersion: true), CreateTestIndexableEntity("Fence", paths: new List <ID> { ItemIDs.ContentRoot }, latestVersion: false), }.AsQueryable()); searchIndex .CreateSearchContext() .GetQueryable <TestIndexableEntity>() .Returns(queryable); ContentSearchManager.SearchConfiguration.Indexes[indexNameProvider.IndexName] = searchIndex; var sut = new SearchResultRepository <TestIndexableEntity>(elementProvider, indexNameProvider, predicateBuilder); // Act var actual = sut.GetSearchResult(new SearchCriteria()); // Assert actual.TotalSearchResults.ShouldBeEquivalentTo(1); actual.Hits.First().Fields["_latestversion"].Should().Be("1"); }
public void Items_NotLatestItemVersionExists_ReturnsOnlyLatestItems([Content] DbItem[] contentItems, ISearchIndex index, [Frozen] SearchProvider searchProvider, Switcher<SearchProvider> searchProviderSwitcher, [Content] Item renderingItem, IRenderingPropertiesRepository renderingPropertiesRepository) { //arrange var results = GetResults(contentItems).ToArray(); results.First().IsLatestVersion = false; renderingPropertiesRepository.Get<QueryableDatasourceRenderingSettings>() .Returns(new QueryableDatasourceRenderingSettings { SearchResultsLimit = 10 }); InitIndexes(index, searchProvider, results.AsQueryable()); var renderingModel = new QueryableDatasourceRenderingModel(renderingPropertiesRepository) { DatasourceString = "notEmpty" }; //act var items = renderingModel.Items; //assert items.Count().Should().Be(contentItems.Length - 1); index.CreateSearchContext().ReceivedWithAnyArgs(1); }
public void Items_DifferentItemLanguageExists_ReturnsOnlyContextLanguage([Content] DbItem[] contentItems, ISearchIndex index, [ReplaceSearchProvider] SearchProvider searchProvider, [Content] Item renderingItem, IRenderingPropertiesRepository renderingPropertiesRepository) { //arrange var results = GetResults(contentItems).ToArray(); results.First().Language = "noncontext"; renderingPropertiesRepository.Get<QueryableDatasourceRenderingSettings>() .Returns(new QueryableDatasourceRenderingSettings { SearchResultsLimit = 10 }); InitIndexes(index, searchProvider, results.AsQueryable()); var renderingModel = new QueryableDatasourceRenderingModel(renderingPropertiesRepository) { DatasourceString = "notEmpty" }; //act var items = renderingModel.Items; //assert items.Count().Should().Be(contentItems.Length - 1); index.CreateSearchContext().ReceivedWithAnyArgs(1); }
public void Items_IndexMatchDb_ReturnsAllItems([Content] DbItem[] contentItems, ISearchIndex index, [ReplaceSearchProvider] SearchProvider searchProvider, [Content] Item renderingItem, IRenderingPropertiesRepository renderingPropertiesRepository) { //arrange var results = GetResults(contentItems); renderingPropertiesRepository.Get<QueryableDatasourceRenderingSettings>() .Returns(new QueryableDatasourceRenderingSettings { SearchResultsLimit = 10 }); InitIndexes(index, searchProvider, results); var renderingModel = new QueryableDatasourceRenderingModel(renderingPropertiesRepository) { DatasourceString = "notEmpty" }; //act var items = renderingModel.Items; //assert items.Count().Should().Be(contentItems.Length); index.CreateSearchContext().ReceivedWithAnyArgs(1); }
public void Items_EmptyDatasource_ReturnsEmptyCollection([ResolvePipeline("getRenderingDatasource")] EmptyPipeline processor, List<DbItem> indexedItems,SearchProvider searchProvider, ISearchIndex index, string indexName, [Content] Item renderingItem) { //arrange InitIndexes(index, searchProvider, new List<SearchResultItem>().AsQueryable()); var renderingModel = new QueryableDatasourceRenderingModel() { Rendering = new Rendering()}; //act var items = renderingModel.Items; //assert items.Count().Should().Be(0); index.CreateSearchContext().DidNotReceiveWithAnyArgs(); }
public void Items_IndexHaveNonexistentItems_ReturnsExistentItems([Content] DbItem[] contentItems, DbItem brokenItem, List<DbItem> indexedItems, ISearchIndex index, string indexName, [ReplaceSearchProvider] SearchProvider searchProvider, [Content] Item renderingItem) { //arrange indexedItems.AddRange(contentItems); indexedItems.Add(brokenItem); var results = GetResults(indexedItems); InitIndexes(index, searchProvider, results); var renderingModel = new QueryableDatasourceRenderingModel() { Rendering = new Rendering() { DataSource = "notEmpty" } }; //act var items = renderingModel.Items.ToArray(); //assert items.Count().Should().Be(contentItems.Length); index.CreateSearchContext().ReceivedWithAnyArgs(1); }
public void Items_ItemTemplateSet_FiltersByTemplateId(Db db, [Content] DbTemplate templateItem, [Content] DbItem[] contentItems, ISearchIndex index, [ReplaceSearchProvider] SearchProvider searchProvider, string indexName, [Content] Item renderingItem) { //arrange var dbItem = new DbItem("templated", ID.NewID, templateItem.ID); db.Add(dbItem); var dbItems = contentItems.ToList(); dbItems.Add(dbItem); var results = GetResults(dbItems); InitIndexes(index, searchProvider, results); var renderingModel = new QueryableDatasourceRenderingModel() {Rendering = new Rendering() {DataSource = "notEmpty"} }; renderingModel.DatasourceTemplate = db.GetItem(templateItem.ID); //act var items = renderingModel.Items; //assert items.Count().Should().Be(1); index.CreateSearchContext().ReceivedWithAnyArgs(1); }
public void Items_IndexEmpty_ReturnsEmptyCollection(List<DbItem> indexedItems, ISearchIndex index, string indexName, [Frozen] SearchProvider searchProvider, Switcher<SearchProvider> searchProviderSwitcher, [Content] Item renderingItem, IRenderingPropertiesRepository renderingPropertiesRepository) { //arrange InitIndexes(index, searchProvider, new List<SearchResultItem>().AsQueryable()); renderingPropertiesRepository.Get<QueryableDatasourceRenderingSettings>() .Returns(new QueryableDatasourceRenderingSettings { SearchResultsLimit = 10 }); var renderingModel = new QueryableDatasourceRenderingModel(renderingPropertiesRepository) { DatasourceString = "notEmpty" }; //act var items = renderingModel.Items; //assert items.Count().Should().Be(0); index.CreateSearchContext().ReceivedWithAnyArgs(1); }
public void Items_IndexHaveNonexistentItems_ReturnsExistentItems([Content] DbItem[] contentItems, DbItem brokenItem, List<DbItem> indexedItems, ISearchIndex index, string indexName, [Frozen] SearchProvider searchProvider, Switcher<SearchProvider> searchProviderSwitcher, [Content] Item renderingItem, IRenderingPropertiesRepository renderingPropertiesRepository) { //arrange indexedItems.AddRange(contentItems); indexedItems.Add(brokenItem); renderingPropertiesRepository.Get<QueryableDatasourceRenderingSettings>() .Returns(new QueryableDatasourceRenderingSettings { SearchResultsLimit = 10 }); var results = GetResults(indexedItems); InitIndexes(index, searchProvider, results); var renderingModel = new QueryableDatasourceRenderingModel(renderingPropertiesRepository) { DatasourceString = "notEmpty" }; //act var items = renderingModel.Items.ToArray(); //assert items.Count().Should().Be(contentItems.Length); index.CreateSearchContext().ReceivedWithAnyArgs(1); }
public void Items_ItemTemplateSet_FiltersByTemplateId(Db db, [Content] DbTemplate templateItem, [Content] DbItem[] contentItems, ISearchIndex index, [Frozen] SearchProvider searchProvider, Switcher<SearchProvider> searchProviderSwitcher, string indexName, [Content] Item renderingItem, IRenderingPropertiesRepository renderingPropertiesRepository) { //arrange var dbItem = new DbItem("templated", ID.NewID, templateItem.ID); db.Add(dbItem); var dbItems = contentItems.ToList(); dbItems.Add(dbItem); var results = GetResults(dbItems); renderingPropertiesRepository.Get<QueryableDatasourceRenderingSettings>() .Returns(new QueryableDatasourceRenderingSettings { SearchResultsLimit = 10 }); InitIndexes(index, searchProvider, results); var renderingModel = new QueryableDatasourceRenderingModel(renderingPropertiesRepository) { Rendering = new Rendering(), DatasourceString = "notEmpty", DatasourceTemplate = db.GetItem(templateItem.ID) }; //act var items = renderingModel.Items; //assert items.Count().Should().Be(1); index.CreateSearchContext().ReceivedWithAnyArgs(1); }