BetterCMS.Module.LuceneSearch.Services.IndexerService.DefaultIndexerService.AddHtmlDocument C# (CSharp) Method

AddHtmlDocument() public method

public AddHtmlDocument ( PageData pageData ) : void
pageData PageData
return void
        public void AddHtmlDocument(PageData pageData)
        {
            if (!Initialize())
            {
                Log.ErrorFormat("Cannot add document. Lucene search engine is not initialized.");
                return;
            }

            if (configurationExcludedPages.Contains(pageData.AbsolutePath) ||
                configurationExcludedPages.Contains(pageData.AbsoluteUri))
            {
                var term = new Term(LuceneIndexDocumentKeys.Id, pageData.Id.ToString().ToLower());
                writer.DeleteDocuments(term);
                return;
            }

            var doc = new Document();

            var path = new Term(LuceneIndexDocumentKeys.Path, pageData.AbsolutePath);

            var body = GetBody(pageData.Content);
            var title = GetTitle(pageData.Content);
            doc.Add(new Field(LuceneIndexDocumentKeys.Path, pageData.AbsolutePath, Field.Store.YES, Field.Index.NOT_ANALYZED));
            doc.Add(new Field(LuceneIndexDocumentKeys.Title, title, Field.Store.YES, Field.Index.ANALYZED));
            doc.Add(new Field(LuceneIndexDocumentKeys.Content, body, Field.Store.YES, Field.Index.ANALYZED));
            doc.Add(new Field(LuceneIndexDocumentKeys.Id, pageData.Id.ToString(), Field.Store.YES, Field.Index.ANALYZED));
            doc.Add(new Field(LuceneIndexDocumentKeys.IsPublished, pageData.IsPublished.ToString(), Field.Store.YES, Field.Index.ANALYZED));

            var args = LuceneEvents.Instance.OnDocumentSaving(doc, pageData);

            if (!args.ExcludeDefaultDocumentFromIndex)
            {
                writer.UpdateDocument(path, args.Document, analyzer);
            }

            if (args.AdditionalDocuments != null && args.AdditionalDocuments.Count > 0)
            {
                foreach (var document in args.AdditionalDocuments)
                {
                    var luceneDocument = new Document();
                    luceneDocument.Add(new Field(LuceneIndexDocumentKeys.Path, document.Path, Field.Store.YES, Field.Index.NOT_ANALYZED));
                    luceneDocument.Add(new Field(LuceneIndexDocumentKeys.Title, document.Title, Field.Store.YES, Field.Index.ANALYZED));
                    luceneDocument.Add(new Field(LuceneIndexDocumentKeys.Content, document.Content, Field.Store.YES, Field.Index.ANALYZED));
                    luceneDocument.Add(new Field(LuceneIndexDocumentKeys.Id, document.Id.ToString(), Field.Store.YES, Field.Index.ANALYZED));
                    luceneDocument.Add(new Field(LuceneIndexDocumentKeys.IsPublished, document.IsPublished.ToString(), Field.Store.YES, Field.Index.ANALYZED));

                    writer.UpdateDocument(new Term(LuceneIndexDocumentKeys.Path, document.Path), luceneDocument, analyzer);
                }
            }
        }

Usage Example

        public void Should_Return_Correct_Search_Results()
        {
            var document1 = new HtmlDocument();
            document1.DocumentNode.AppendChild(HtmlNode.CreateNode("<title>Test title</title>"));
            document1.DocumentNode.AppendChild(HtmlNode.CreateNode("<body><p>Body with search phrase test</p></body>"));
            
            var document2 = new HtmlDocument();
            document2.DocumentNode.AppendChild(HtmlNode.CreateNode("<title>Test title</title>"));
            document2.DocumentNode.AppendChild(HtmlNode.CreateNode("<body><p>Body without search phrase</p></body>"));

            var page1 = new PageData { AbsolutePath = "/test-1", Content = document1, Id = Guid.NewGuid(), IsPublished = true};
            var page2 = new PageData { AbsolutePath = "/test-2", Content = document2, Id = Guid.NewGuid(), IsPublished = true };

            var service = new DefaultIndexerService(Container.Resolve<ICmsConfiguration>(), Container.Resolve<IRepository>(),
                Container.Resolve<ISecurityService>(), Container.Resolve<IAccessControlService>());

            if (service.OpenWriter())
            {
                service.AddHtmlDocument(page1);
                service.AddHtmlDocument(page2);
                service.CloseWriter();
            }

            var results = service.Search(new SearchRequest("test"));

            Assert.IsNotNull(results.Items);
            Assert.AreEqual(results.Items.Count, 1, "Should return one item.");
            Assert.IsTrue(results.Items[0].Link == page1.AbsolutePath);
        }
All Usage Examples Of BetterCMS.Module.LuceneSearch.Services.IndexerService.DefaultIndexerService::AddHtmlDocument