public RequestDocumentCollection Convert(IEnumerable <Item> obj) { var results = new RequestDocumentCollection { Documents = new List <RequestDocument>() }; foreach (var item in obj) { var indexable = new SitecoreIndexableItem(item); using (var searchContext = ContentSearchManager.GetIndex(indexable) .CreateSearchContext(SearchSecurityOptions.DisableSecurityCheck)) { var searchResult = searchContext.GetQueryable <ExtendedSearchResultItem>() .Where(x => x.ItemId == item.ID && x.Language == item.Language.Name && x.LatestVersion).GetResults().FirstOrDefault(); if (searchResult != null && searchResult.Document != null && !string.IsNullOrWhiteSpace(searchResult.Document.Content)) { var document = new RequestDocument(); document.Text = searchResult.Document.Content; document.Id = item.ID.Guid; document.Language = item.Language.Name; if (!results.Documents.Any(x => x.Id == document.Id)) { results.Documents.Add(document); } } } } return(results); }
public void ShouldLoadSite() { //Arrange var fakeSite = new FakeSiteContext( new Sitecore.Collections.StringDictionary { { "name", "website" }, { "database", "web" }, { "cdTargetHostName", "cdsite" } }); // switch the context site using (new FakeSiteContextSwitcher(fakeSite)) using (var db = new Db { new ItemBuilder().Build() }) { var item = db.GetItem("/sitecore/content/source"); var indexable = new SitecoreIndexableItem(item); var sut = new CurrentItemLinkField(); sut.Site = Context.Site.Name; //Act var actual = sut.ComputeFieldValue(indexable); //Assert actual.Should().Be("//cdsite/en/sitecore/content/source.aspx"); } }
public Item SearchPeopleByOktaId(string identifier) { Sitecore.Diagnostics.Assert.IsNotNullOrEmpty(identifier, "identifier can't be null or empty"); var peopleFolder = _database.GetItem(Constants.Person.Folder.FOLDER_ID); Sitecore.Diagnostics.Assert.IsNotNull(peopleFolder, "can't find people folder"); var indexable = new SitecoreIndexableItem(peopleFolder); using (var context = ContentSearchManager.GetIndex(indexable).CreateSearchContext()) { //original search query conditions that pull back blog items with tags in common var searchQuery = context.GetQueryable <PeopleDataItem>().Where(x => x.TemplateId == Constants.Person.Template.TEMPLATE_ID && x.Paths.Contains(peopleFolder.ID)); var predicate = PredicateBuilder.True <PeopleDataItem>(); predicate = predicate.And(x => x.OktaId == identifier); searchQuery = searchQuery.Where(predicate); var searchResults = searchQuery.GetResults(); if (searchResults != null && searchResults.Any()) { var person = searchResults.FirstOrDefault(); var personItem = _database.GetItem(person.Document.ItemId); return(personItem); } } return(null); }
/// <summary> /// Search Item from index /// </summary> /// <param name="contextItem">Context item</param> /// <param name="itemName">Item name</param> /// <param name="templateId">Item teamplate Id</param> /// <param name="searchRootNode">Search root node</param> /// <param name="includeSiteName">Include site name</param> /// <returns></returns> private Item SearchItemFromIndex(Item contextItem, string itemName, ID templateId, ID searchRootNode, bool includeSiteName) { string siteName = string.Empty; // Seperate siteName from itemName if (includeSiteName) { siteName = itemName?.Split(new[] { Constants.Blank }, StringSplitOptions.RemoveEmptyEntries)?.Last() ?? string.Empty; itemName = itemName?.Replace(siteName, string.Empty); } // try to search and resolve item from index var indexable = new SitecoreIndexableItem(contextItem); using (var searchContext = ContentSearchManager.GetIndex(indexable).CreateSearchContext()) { var results = searchContext.GetQueryable <SearchResultItem>() .Where(x => x.TemplateId == templateId && x.Paths.Contains(searchRootNode) && x.Language.Equals(Context.Language.Name, StringComparison.InvariantCultureIgnoreCase) && x.Name.Equals(itemName, StringComparison.InvariantCultureIgnoreCase)) .ToList(); if (!results.Any()) { return(null); } return(includeSiteName && !string.IsNullOrEmpty(siteName) ? results.First(x => x.GetItem().SiteName().NormalizeItemName() == siteName)?.GetItem() ?? null : results.First()?.GetItem() ?? null); } }
protected virtual void AdjustOptions(SitecoreIndexableItem item) { if (!string.IsNullOrEmpty(Site)) { var siteContext = SiteContext.GetSite(Site); if (siteContext == null) { throw new Exception($"Site {Site} cannot be reached"); } //we typically generate index on CM but site URLs in CM will not work for CD //replacing "targetHostName" is not good solution because it breaks PE in CM //"cdTargetHostName" site argument should solve that issue. Index uses it instead of targetHostName and PE continue using "targetHostName" var cmTargetHostName = siteContext.Properties["cdTargetHostName"]; if (!String.IsNullOrWhiteSpace(cmTargetHostName)) { var props = new Sitecore.Collections.StringDictionary(ToDictionary(siteContext.SiteInfo.Properties)); props["targetHostName"] = cmTargetHostName; var siteInfo = new SiteInfo(props); siteContext = new SiteContext(siteInfo); } UrlOptions.Site = siteContext; } }
public void ParentsShouldBeAdded() { // arrange using (var db = new Db { new ItemBuilder().AddSubItem().Build() }) { var item = db.GetItem("/sitecore/content/source/subitem"); var indexable = new SitecoreIndexableItem(item); var context = new Mock <IProviderUpdateContext>(); var index = new IndexBuilder().WithParentsComputedField("parents") .Build(); context.Setup(t => t.Index).Returns(index); var sut = new AlgoliaDocumentBuilder(indexable, context.Object); //Act sut.AddComputedIndexFields(); //Assert var doc = sut.Document; var parents = (JArray)doc["parents"]; parents.Count.Should().Be(1); ((string)parents.First).Should().Be(TestData.TestItemId.ToString()); } }
protected override void ProcessRecord() { if (Item != null) { var itemDatabase = Item.Database.Name; var itemPath = Item.Paths.Path; var indexable = new SitecoreIndexableItem(Item); foreach (var index in WildcardFilter(Name, ContentSearchManager.Indexes, index => index.Name)) { if (!index.Crawlers.Any( c => c is SitecoreItemCrawler && ((SitecoreItemCrawler)c).Database.Is(itemDatabase))) { continue; } RefreshItem(index, indexable, itemPath); } } else if (SearchResultItem != null) { var itemPath = SearchResultItem.Path; var indexable = new SitecoreIndexableItem(SearchResultItem.GetItem()); var indexname = SearchResultItem.Fields["_indexname"].ToString(); foreach ( var index in WildcardFilter(indexname, ContentSearchManager.Indexes, index => index.Name)) { RefreshItem(index, indexable, itemPath); } } }
public void AddDateFieldTest() { // arrange using (var db = new Db { new ItemBuilder().WithHardcodedDate().Build() }) { var item = db.GetItem("/sitecore/content/source"); var indexable = new SitecoreIndexableItem(item); var context = new Mock <IProviderUpdateContext>(); var index = new IndexBuilder() .WithSimpleFieldTypeMap("datetime") .WithDateFieldReader("datetime") .Build(); context.Setup(t => t.Index).Returns(index); var sut = new AlgoliaDocumentBuilder(indexable, context.Object); var field = new SitecoreItemDataField(item.Fields[ItemBuilder.DateFieldName]); //Act sut.AddField(field); //Assert JObject doc = sut.Document; Assert.AreEqual(1418787000, (int)doc["date"]); Assert.AreEqual(JTokenType.Integer, doc["date"].Type); } }
protected override void ProcessRecord() { SitecoreVersion.V72.OrNewer( () => { if (Item != null) { var itemDatabase = Item.Database.Name; var itemPath = Item.Paths.Path; var indexableId = new SitecoreIndexableItem(Item).Id; foreach (var index in WildcardFilter(Name, ContentSearchManager.Indexes, index => index.Name)) { if (!index.Crawlers.Any(c => c is SitecoreItemCrawler && ((SitecoreItemCrawler)c).Database.Is(itemDatabase))) { continue; } DeleteItem(index, indexableId, itemPath); } } else if (SearchResultItem != null) { var itemPath = SearchResultItem.Path; var indexableId = (SitecoreItemId)SearchResultItem.ItemId; var indexname = SearchResultItem.Fields["_indexname"].ToString(); foreach (var index in WildcardFilter(indexname, ContentSearchManager.Indexes, index => index.Name)) { DeleteItem(index, indexableId, itemPath); } } }).ElseWriteWarning(this, "Remove-SearchIndexItem", false); }
protected override bool IsExcludedFromIndex(SitecoreIndexableItem indexable, bool checkLocation = false) { try { var sitecoreIndexableItem = indexable as SitecoreIndexableItem; if (sitecoreIndexableItem == null || sitecoreIndexableItem.Item.Axes.GetAncestors() .All(i => i.TemplateID != GlobalConstants.FaceMediaFolderTemplateId)) { return(true); } if (!sitecoreIndexableItem.Item.Versions.IsLatestVersion()) { return(true); } return(base.IsExcludedFromIndex(indexable)); } catch (Exception e) { Log.Info(e.ToString(), this); return(false); } }
public void ArrayWithOneValueShuldBeAddedAsArray() { // arrange using (var db = new Db { new ItemBuilder().Build() }) { var item = db.GetItem("/sitecore/content/source"); var indexable = new SitecoreIndexableItem(item); var context = new Mock <IProviderUpdateContext>(); var index = new IndexBuilder() .Build(); context.Setup(t => t.Index).Returns(index); var sut = new AlgoliaDocumentBuilder(indexable, context.Object); var value = new List <string> { "one" }; //Act sut.AddField("keywords", value); var actual = sut.Document; //Assert Assert.AreEqual("one", (string)actual["keywords"][0]); } }
public void StringValueShouldBeTrimmed() { // arrange using (var db = new Db { new ItemBuilder().WithDisplayName(" test ").Build() }) { var item = db.GetItem("/sitecore/content/source"); var indexable = new SitecoreIndexableItem(item); var context = new Mock <IProviderUpdateContext>(); var index = new IndexBuilder() .WithSimpleFieldTypeMap("text") .Build(); context.Setup(t => t.Index).Returns(index); var sut = new AlgoliaDocumentBuilder(indexable, context.Object); var field = new SitecoreItemDataField(item.Fields[ItemBuilder.DispalyNameFieldName]); //Act sut.AddField(field); //Assert JObject doc = sut.Document; Assert.AreEqual("test", (string)doc["display name"]); } }
public void AddOprationShouldAddDocToContext() { // arrange using (var db = new Db { _source }) { var item = db.GetItem("/sitecore/content/source"); var indexable = new SitecoreIndexableItem(item); JObject doc = null; var context = new Mock <IProviderUpdateContext>(); context.Setup( t => t.AddDocument(It.IsAny <object>(), It.IsAny <IExecutionContext>())) .Callback( (object itemToUpdate, IExecutionContext executionContext) => doc = itemToUpdate as JObject); var index = new IndexBuilder().Build(); context.Setup(t => t.Index).Returns(index); var operations = new AlgoliaIndexOperations(index); //Act operations.Add(indexable, context.Object, new ProviderIndexConfiguration()); //Assert context.Verify(t => t.AddDocument(It.IsAny <object>(), It.IsAny <IExecutionContext>()), Times.Once); Assert.AreEqual("en_" + TestData.TestItemKey.ToLower(), (string)doc["objectID"]); Assert.AreEqual("/sitecore/content/source", (string)doc["_fullpath"]); Assert.AreEqual("source", (string)doc["_name"]); Assert.AreEqual("en", (string)doc["_language"]); Assert.AreEqual(TestData.TestItemId.ToString(), (string)doc["_id"]); } }
public void AddDictionaryTest() { // arrange using (var db = new Db { new ItemBuilder().Build() }) { var item = db.GetItem("/sitecore/content/source"); var indexable = new SitecoreIndexableItem(item); var context = new Mock <IProviderUpdateContext>(); var index = new IndexBuilder() .Build(); context.Setup(t => t.Index).Returns(index); var sut = new AlgoliaDocumentBuilder(indexable, context.Object); var value = new Dictionary <string, object> { { "Price", "$0-$6" }, { "Blade Count", "2 Blades" } }; //Act sut.AddField("any name", value); //Assert JObject doc = sut.Document; ((string)doc["Price"]).Should().Be("$0-$6"); ((string)doc["Blade Count"]).Should().Be("2 Blades"); } }
public void AddOperationShouldUseMaxFieldLength(int maxLenth, string expected) { // arrange using (var db = new Db { new ItemBuilder().AddSubItem().Build() }) { var item = db.GetItem("/sitecore/content/source"); var indexable = new SitecoreIndexableItem(item); IEnumerable <JObject> docs = null; var index = new IndexBuilder().WithMaxFieldLength(maxLenth).Build(); var algoliaRepository = new Mock <IAlgoliaRepository>(); algoliaRepository.Setup( t => t.SaveObjectsAsync(It.IsAny <IEnumerable <JObject> >())) .Callback( (IEnumerable <JObject> objects) => docs = objects) .ReturnsAsync(new JObject()); var context = new AlgoliaUpdateContext(index, algoliaRepository.Object); var operations = new AlgoliaIndexOperations(index); //Act operations.Add(indexable, context, index.Configuration); context.Commit(); //Assert var itemDoc = docs.First(t => (string)t["_name"] == "source"); ((string)itemDoc["_fullpath"]).Should().Be(expected); } }
public void TemplateIdShoulNotBeAssignedByDefault() { // arrange using (var db = new Db { new ItemBuilder().AddSubItem().Build() }) { var item = db.GetItem("/sitecore/content/source"); var indexable = new SitecoreIndexableItem(item); IEnumerable <JObject> docs = null; var index = new IndexBuilder().Build(); var algoliaRepository = new Mock <IAlgoliaRepository>(); algoliaRepository.Setup( t => t.SaveObjectsAsync(It.IsAny <IEnumerable <JObject> >())) .Callback( (IEnumerable <JObject> objects) => docs = objects) .ReturnsAsync(new JObject()); var context = new AlgoliaUpdateContext(index, algoliaRepository.Object); var operations = new AlgoliaIndexOperations(index); //Act operations.Add(indexable, context, index.Configuration); context.Commit(); //Assert var itemDoc = docs.First(t => (string)t["_name"] == "source"); itemDoc["_template"].Should().BeNull(); } }
public void AddOperationShouldLoadComputedFields() { // arrange using (var db = new Db { new ItemBuilder().AddSubItem().Build() }) { var item = db.GetItem("/sitecore/content/source/subitem"); var indexable = new SitecoreIndexableItem(item); IEnumerable <JObject> docs = null; var index = new IndexBuilder().WithParentsComputedField("parents").Build(); var algoliaRepository = new Mock <IAlgoliaRepository>(); algoliaRepository.Setup( t => t.SaveObjectsAsync(It.IsAny <IEnumerable <JObject> >())) .Callback( (IEnumerable <JObject> objects) => docs = objects) .ReturnsAsync(new JObject()); var context = new AlgoliaUpdateContext(index, algoliaRepository.Object); var operations = new AlgoliaIndexOperations(index); //Act operations.Add(indexable, context, new ProviderIndexConfiguration()); context.Commit(); //Assert var itemDoc = docs.First(t => (string)t["_name"] == "subitem"); var parents = (JArray)itemDoc["parents"]; parents.Count.Should().Be(1); ((string)parents.First).Should().Be(TestData.TestItemId.ToString()); } }
public void ShouldReturnCustomTitle() { //Arrange using (var db = new Db { new ItemBuilder().AddSubItemWithField("titleField", "titleValue") .WithReference("droplink").Build() }) { var item = db.GetItem("/sitecore/content/source"); var indexable = new SitecoreIndexableItem(item); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(@"<field><target referenceFieldName=""titleField""/></field>"); var xmlNode = xmlDoc.FirstChild; var sut = new ReferenceField(xmlNode) { FieldName = "Reference" }; //Act var actual = (IEnumerable <string>)sut.ComputeFieldValue(indexable); //Assert actual.Should().BeEquivalentTo("titleValue"); } }
public void BrokenLinkShouldNotFail() { //Arrange using (var db = new Db { new ItemBuilder() .WithReference(new List <ID> { ID.NewID }).Build() }) { var item = db.GetItem("/sitecore/content/source"); var indexable = new SitecoreIndexableItem(item); var sut = new ReferenceField { FieldName = "Reference", }; //Act var actual = (IEnumerable <string>)sut.ComputeFieldValue(indexable); //Assert actual.Should().BeEquivalentTo(); } }
public void DuplicatedFieldShouldNotFail() { // arrange using (var db = new Db { new ItemBuilder().WithHardcodedDate().Build() }) { var item = db.GetItem("/sitecore/content/source"); var indexable = new SitecoreIndexableItem(item); var context = new Mock <IProviderUpdateContext>(); var index = new IndexBuilder() .Build(); context.Setup(t => t.Index).Returns(index); var sut = new AlgoliaDocumentBuilder(indexable, context.Object); var value = JObject.Parse(@"{'_geoloc': { 'lat': 33.7489954, 'lng': -84.3879824 }}"); //Act sut.AddField(ItemBuilder.LocationFieldName, value); sut.AddField(ItemBuilder.LocationFieldName, value); //Assert JObject doc = sut.Document; Assert.AreEqual(33.7489954, (double)doc["_geoloc"]["lat"]); Assert.AreEqual(-84.3879824, (double)doc["_geoloc"]["lng"]); } }
protected override void ProcessRecord() { if (Item != null) { var itemPath = Item.Paths.Path; var indexable = new SitecoreIndexableItem(Item); foreach (var index in WildcardFilter(Name, ContentSearchManager.Indexes, index => index.Name)) { if (IndexIsValidForItem(index, Item)) { ProcessIndexable(index, indexable, itemPath); } } } else if (SearchResultItem != null) { var itemPath = SearchResultItem.Path; var indexable = new SitecoreIndexableItem(SearchResultItem.GetItem()); var indexname = SearchResultItem.Fields["_indexname"].ToString(); foreach ( var index in WildcardFilter(indexname, ContentSearchManager.Indexes, index => index.Name)) { ProcessIndexable(index, indexable, itemPath); } } }
public void AddSimpleDoubleFieldTest() { // arrange using (var db = new Db { new ItemBuilder().WithPrice(123.456).Build() }) { var item = db.GetItem("/sitecore/content/source"); var indexable = new SitecoreIndexableItem(item); var context = new Mock <IProviderUpdateContext>(); var index = new IndexBuilder() .WithSimpleFieldTypeMap("number") .WithNumericFieldReader("number") .Build(); context.Setup(t => t.Index).Returns(index); var sut = new AlgoliaDocumentBuilder(indexable, context.Object); var field = new SitecoreItemDataField(item.Fields[ItemBuilder.PriceFieldName]); //Act sut.AddField(field); //Assert JObject doc = sut.Document; Assert.AreEqual(123.456, (double)doc["price"]); Assert.AreEqual(JTokenType.Float, doc["price"].Type); } }
public void ShouldUseSite() { var fakeSite = new Sitecore.FakeDb.Sites.FakeSiteContext( new Sitecore.Collections.StringDictionary { { "name", "website" }, { "rootPath", "/sitecore" } }); //Arrange using (new FakeSiteContextSwitcher(fakeSite)) using (var db = new Db { new ItemBuilder().Build() }) { var item = db.GetItem("/sitecore/content/source"); var indexable = new SitecoreIndexableItem(item); var sut = new CurrentItemLinkField(); //Act var actual = sut.ComputeFieldValue(indexable); //Assert actual.Should().Be("/en/content/source.aspx"); } }
public void EmptyArrayShuldNotBeAdded() { // arrange using (var db = new Db { new ItemBuilder().Build() }) { var item = db.GetItem("/sitecore/content/source"); var indexable = new SitecoreIndexableItem(item); var context = new Mock <IProviderUpdateContext>(); var index = new IndexBuilder() .Build(); context.Setup(t => t.Index).Returns(index); var sut = new AlgoliaDocumentBuilder(indexable, context.Object); var value = new List <string> { }; //Act sut.AddField("keywords", value); var actual = sut.Document; //Assert actual["keywords"].Should().BeNull(); } }
public IEnumerable <Item> GetItems(Item startItem) { // If a null start item is used, simply return an empty list if (startItem == null) { return(new List <Item>()); } var items = new List <Item> { startItem }; var indexable = new SitecoreIndexableItem(startItem); using (var searchContext = ContentSearchManager.GetIndex(indexable) .CreateSearchContext(SearchSecurityOptions.DisableSecurityCheck)) { // Filter the search by the start item language and only return results that are the latest version. var results = searchContext.GetQueryable <ExtendedSearchResultItem>() .Where(x => x.Paths.Contains(startItem.ID) && x.Language == startItem.Language.Name && x.LatestVersion).GetResults().ToList(); if (results.Any()) { items.AddRange(results.Select(x => x.Document.GetItem())); } } return(items); }
public void StandardValueTest(string defaultValue) { var templateId = new TemplateID(ID.NewID); using (var db = new Db { new DbTemplate("Sample", templateId) { { "Title", defaultValue } } }) { var contentRoot = db.GetItem(ItemIDs.ContentRoot); var item = contentRoot.Add("Home", templateId); var indexable = new SitecoreIndexableItem(item); var context = new Mock <IProviderUpdateContext>(); var index = new IndexBuilder() .WithSimpleFieldTypeMap("text") .Build(); context.Setup(t => t.Index).Returns(index); var sut = new AlgoliaDocumentBuilder(indexable, context.Object); var field = new SitecoreItemDataField(item.Fields["Title"]); //Act sut.AddField(field); //Assert JObject doc = sut.Document; Assert.AreEqual("Home", (string)doc["title"]); } }
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)); } }
/// <summary> /// Retrieves a redirect record for the provided local path based on the context site. /// </summary> private MarketingRedirect FindRedirectRecordFor(string oldLocalPath) { var siteRoot = Sitecore.Context.Database.GetItem(Sitecore.Context.Site.StartPath, Sitecore.Context.Language); var indexable = new SitecoreIndexableItem(siteRoot); var repository = new Repository(Sitecore.Context.Database, ContentSearchManager.GetIndex(indexable)); return(repository.GetNewUrl(Sitecore.Context.Site.SiteInfo, oldLocalPath)); }
protected override bool IsExcludedFromIndex(SitecoreIndexableItem indexable, bool checkLocation = false) { Assert.ArgumentNotNull(indexable, "item"); if (ExcludeItemsList.Any(path => indexable.AbsolutePath.ToLower().StartsWith(path.ToLower()))) { return(true); } return(base.IsExcludedFromIndex(indexable, checkLocation)); }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Page_Load(object sender, EventArgs e) { ID template = TemplateReferences.Holiday.ID; Guid path = ItemReferences.SiteHome.ID.Guid; ID rootID = Sitecore.Context.Item.ID; // Get context database index SitecoreIndexableItem indexableItem = new SitecoreIndexableItem(Sitecore.Context.Item); var index = Sitecore.ContentSearch.ContentSearchManager.GetIndex(indexableItem); //var index = Sitecore.ContentSearch.ContentSearchManager.GetIndex(Sitecore.Context.Item as IIndexable); // Set up search context using (var context = index.CreateSearchContext()) { // Initiate query - use custsom SitecoreItem class IQueryable <SitecoreItem> query = context.GetQueryable <SitecoreItem>(); // Retrieve rich search object from session - this is just a property bag SearchObject searchObject = GetSearchObject(); // Build query from SearchObject properties if (searchObject != null) { query = BuildQuery(searchObject, query); } //var computedLanguage = Sitecore.Context.Language.CultureInfo.Name.Replace("-", String.Empty); var language = Sitecore.Context.Language.ToString(); // Append standard query parameters - e.g. language, template, root item // and get results object var results = query .Where(x => x.Paths.Contains(rootID)) .Where(x => x.TemplateId == template) .Where(x => x.Language == language) .Page(searchObject.Page - 1, itemsPerPage) .OrderBy(x => x.PageHeading) .GetResults(); if (results != null) { if (results.Hits.Any()) { rpHolidays.DataSource = results.Hits.Select(x => x.Document); rpHolidays.DataBind(); } ShowNoResultsMessage(results.Hits.Any()); } pgPagination.Page = searchObject.Page; pgPagination.PageSize = itemsPerPage; pgPagination.Total = results.TotalSearchResults; } }
/// <summary> /// The get data. /// </summary> /// <returns> /// The <see cref="List" />. /// </returns> protected virtual List<SitecoreUISearchResultItem> GetData() { var indexable = new SitecoreIndexableItem(Sitecore.Context.Item); ISearchIndex index = ContentSearchManager.GetIndex(indexable); if (index == null) { return new List<SitecoreUISearchResultItem>(0); } string datasource = DataSource; if (datasource.IsNullOrEmpty()) { return new List<SitecoreUISearchResultItem>(0); } IEnumerable<SearchStringModel> stringModel = UIFilterHelpers.ParseDatasourceString(datasource); using (IProviderSearchContext context = index.CreateSearchContext()) { return LinqHelper.CreateQuery(context, stringModel).OrderBy(i => i.Updated).Take(MaxCount).ToList(); } }
/// <summary> /// Get teh current instance of the SOLR /// </summary> /// <param name="item">Get the item state</param> public SpellCheck(Item item) { solr = ServiceLocator.Current.GetInstance<ISolrOperations<SearchResultItem>>(); var indexable = new SitecoreIndexableItem(item); indexName = GetContextIndexName(indexable); }
/// <summary> /// Indexes this instance. /// </summary> /// <returns></returns> private static ISearchIndex Index() { if (Sitecore.Context.Item != null) { var indexable = new SitecoreIndexableItem(Sitecore.Context.Item); return ContentSearchManager.GetIndex(indexable); } else { if (!Sitecore.Context.PageMode.IsNormal) { return ContentSearchManager.GetIndex("sitecore_master_index"); } else { return ContentSearchManager.GetIndex("sitecore_web_index"); } } }