Пример #1
0
        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);
        }
Пример #2
0
        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");
                }
        }
Пример #3
0
        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);
        }
Пример #4
0
        /// <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;
            }
        }
Пример #6
0
        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);
            }
        }
Пример #11
0
        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]);
            }
        }
Пример #12
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"]);
            }
        }
Пример #13
0
        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"]);
            }
        }
Пример #14
0
        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");
            }
        }
Пример #15
0
        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);
            }
        }
Пример #16
0
        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();
            }
        }
Пример #17
0
        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());
            }
        }
Пример #18
0
        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");
            }
        }
Пример #19
0
        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();
            }
        }
Пример #20
0
        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"]);
            }
        }
Пример #21
0
        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);
                }
            }
        }
Пример #22
0
        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);
            }
        }
Пример #23
0
        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");
                }
        }
Пример #24
0
        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);
        }
Пример #26
0
        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));
        }
Пример #29
0
 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;
            }
        }
Пример #31
0
        /// <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");
         }
     }
 }