Fixes PocoToSqlExpressionVisitor (oops), fixes examine tests by using the correct usings and NRT indexer/searcher to avoid waiting on thread timers

This commit is contained in:
Shannon
2017-01-19 14:00:33 +11:00
parent 4f596d20a9
commit c96e017e65
13 changed files with 230 additions and 144 deletions

View File

@@ -20,6 +20,7 @@ namespace Umbraco.Core.Persistence.Querying
_mapper = mapper; _mapper = mapper;
} }
[Obsolete("Use the overload the specifies a SqlSyntaxProvider")]
public ModelToSqlExpressionVisitor() public ModelToSqlExpressionVisitor()
: this(SqlSyntaxContext.SqlSyntaxProvider, MappingResolver.Current.ResolveMapperByType(typeof(T))) : this(SqlSyntaxContext.SqlSyntaxProvider, MappingResolver.Current.ResolveMapperByType(typeof(T)))
{ } { }

View File

@@ -18,14 +18,13 @@ namespace Umbraco.Core.Persistence.Querying
public PocoToSqlExpressionVisitor(ISqlSyntaxProvider syntaxProvider) public PocoToSqlExpressionVisitor(ISqlSyntaxProvider syntaxProvider)
: base(syntaxProvider) : base(syntaxProvider)
{ {
_pd = new Database.PocoData(typeof(T));
} }
[Obsolete("Use the overload the specifies a SqlSyntaxProvider")] [Obsolete("Use the overload the specifies a SqlSyntaxProvider")]
public PocoToSqlExpressionVisitor() public PocoToSqlExpressionVisitor()
: base(SqlSyntaxContext.SqlSyntaxProvider) : this(SqlSyntaxContext.SqlSyntaxProvider)
{ {
_pd = new Database.PocoData(typeof(T));
} }
protected override string VisitMemberAccess(MemberExpression m) protected override string VisitMemberAccess(MemberExpression m)

View File

@@ -1,6 +1,8 @@
using System; using System;
using System.Linq; using System.Linq;
using Lucene.Net.Analysis.Standard;
using Lucene.Net.Documents; using Lucene.Net.Documents;
using Lucene.Net.Index;
using Lucene.Net.Store; using Lucene.Net.Store;
using Moq; using Moq;
using NUnit.Framework; using NUnit.Framework;
@@ -31,12 +33,15 @@ namespace Umbraco.Tests.PublishedContent
[Test] [Test]
public void Ensure_Children_Are_Sorted() public void Ensure_Children_Are_Sorted()
{ {
using (var luceneDir = new RAMDirectory()) using (var luceneDir = new RandomIdRAMDirectory())
using (var writer = new IndexWriter(luceneDir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), IndexWriter.MaxFieldLength.LIMITED))
using (var indexer = IndexInitializer.GetUmbracoIndexer(writer))
using (var searcher = IndexInitializer.GetUmbracoSearcher(writer))
{ {
var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir); //var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir);
indexer.RebuildIndex(); indexer.RebuildIndex();
var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir); //var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir);
var result = searcher.Search(searcher.CreateSearchCriteria().Id(1111).Compile()); var result = searcher.Search(searcher.CreateSearchCriteria().Id(1111).Compile());
Assert.IsNotNull(result); Assert.IsNotNull(result);
Assert.AreEqual(1, result.TotalItemCount); Assert.AreEqual(1, result.TotalItemCount);
@@ -60,12 +65,15 @@ namespace Umbraco.Tests.PublishedContent
[Test] [Test]
public void Ensure_Result_Has_All_Values() public void Ensure_Result_Has_All_Values()
{ {
using (var luceneDir = new RAMDirectory()) using (var luceneDir = new RandomIdRAMDirectory())
using (var writer = new IndexWriter(luceneDir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), IndexWriter.MaxFieldLength.LIMITED))
using (var indexer = IndexInitializer.GetUmbracoIndexer(writer))
using (var searcher = IndexInitializer.GetUmbracoSearcher(writer))
{ {
var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir); //var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir);
indexer.RebuildIndex(); indexer.RebuildIndex();
var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir); //var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir);
var result = searcher.Search(searcher.CreateSearchCriteria().Id(1111).Compile()); var result = searcher.Search(searcher.CreateSearchCriteria().Id(1111).Compile());
Assert.IsNotNull(result); Assert.IsNotNull(result);
Assert.AreEqual(1, result.TotalItemCount); Assert.AreEqual(1, result.TotalItemCount);

View File

@@ -27,6 +27,7 @@ using UmbracoExamine;
using UmbracoExamine.DataServices; using UmbracoExamine.DataServices;
using umbraco.BusinessLogic; using umbraco.BusinessLogic;
using System.Linq; using System.Linq;
using Lucene.Net.Index;
namespace Umbraco.Tests.PublishedContent namespace Umbraco.Tests.PublishedContent
{ {
@@ -106,11 +107,14 @@ namespace Umbraco.Tests.PublishedContent
[Test] [Test]
public void Ensure_Children_Sorted_With_Examine() public void Ensure_Children_Sorted_With_Examine()
{ {
using (var luceneDir = new RAMDirectory()) using (var luceneDir = new RandomIdRAMDirectory())
using (var writer = new IndexWriter(luceneDir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), IndexWriter.MaxFieldLength.LIMITED))
using (var indexer = IndexInitializer.GetUmbracoIndexer(writer))
using (var searcher = IndexInitializer.GetUmbracoSearcher(writer))
{ {
var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir); //var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir);
indexer.RebuildIndex(); indexer.RebuildIndex();
var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir); //var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir);
var ctx = GetUmbracoContext("/test", 1234); var ctx = GetUmbracoContext("/test", 1234);
var cache = new ContextualPublishedMediaCache(new PublishedMediaCache(ctx.Application, searcher, indexer), ctx); var cache = new ContextualPublishedMediaCache(new PublishedMediaCache(ctx.Application, searcher, indexer), ctx);
@@ -135,11 +139,14 @@ namespace Umbraco.Tests.PublishedContent
[Test] [Test]
public void Do_Not_Find_In_Recycle_Bin() public void Do_Not_Find_In_Recycle_Bin()
{ {
using (var luceneDir = new RAMDirectory()) using (var luceneDir = new RandomIdRAMDirectory())
using (var writer = new IndexWriter(luceneDir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), IndexWriter.MaxFieldLength.LIMITED))
using (var indexer = IndexInitializer.GetUmbracoIndexer(writer))
using (var searcher = IndexInitializer.GetUmbracoSearcher(writer))
{ {
var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir); //var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir);
indexer.RebuildIndex(); indexer.RebuildIndex();
var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir); //var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir);
var ctx = GetUmbracoContext("/test", 1234); var ctx = GetUmbracoContext("/test", 1234);
var cache = new ContextualPublishedMediaCache(new PublishedMediaCache(ctx.Application, searcher, indexer), ctx); var cache = new ContextualPublishedMediaCache(new PublishedMediaCache(ctx.Application, searcher, indexer), ctx);
@@ -175,11 +182,14 @@ namespace Umbraco.Tests.PublishedContent
[Test] [Test]
public void Children_With_Examine() public void Children_With_Examine()
{ {
using (var luceneDir = new RAMDirectory()) using (var luceneDir = new RandomIdRAMDirectory())
using (var writer = new IndexWriter(luceneDir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), IndexWriter.MaxFieldLength.LIMITED))
using (var indexer = IndexInitializer.GetUmbracoIndexer(writer))
using (var searcher = IndexInitializer.GetUmbracoSearcher(writer))
{ {
var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir); //var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir);
indexer.RebuildIndex(); indexer.RebuildIndex();
var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir); //var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir);
var ctx = GetUmbracoContext("/test", 1234); var ctx = GetUmbracoContext("/test", 1234);
var cache = new ContextualPublishedMediaCache(new PublishedMediaCache(ctx.Application, searcher, indexer), ctx); var cache = new ContextualPublishedMediaCache(new PublishedMediaCache(ctx.Application, searcher, indexer), ctx);
@@ -197,11 +207,14 @@ namespace Umbraco.Tests.PublishedContent
[Test] [Test]
public void Descendants_With_Examine() public void Descendants_With_Examine()
{ {
using (var luceneDir = new RAMDirectory()) using (var luceneDir = new RandomIdRAMDirectory())
using (var writer = new IndexWriter(luceneDir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), IndexWriter.MaxFieldLength.LIMITED))
using (var indexer = IndexInitializer.GetUmbracoIndexer(writer))
using (var searcher = IndexInitializer.GetUmbracoSearcher(writer))
{ {
var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir); //var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir);
indexer.RebuildIndex(); indexer.RebuildIndex();
var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir); //var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir);
var ctx = GetUmbracoContext("/test", 1234); var ctx = GetUmbracoContext("/test", 1234);
var cache = new ContextualPublishedMediaCache(new PublishedMediaCache(ctx.Application, searcher, indexer), ctx); var cache = new ContextualPublishedMediaCache(new PublishedMediaCache(ctx.Application, searcher, indexer), ctx);
@@ -219,11 +232,14 @@ namespace Umbraco.Tests.PublishedContent
[Test] [Test]
public void DescendantsOrSelf_With_Examine() public void DescendantsOrSelf_With_Examine()
{ {
using (var luceneDir = new RAMDirectory()) using (var luceneDir = new RandomIdRAMDirectory())
using (var writer = new IndexWriter(luceneDir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), IndexWriter.MaxFieldLength.LIMITED))
using (var indexer = IndexInitializer.GetUmbracoIndexer(writer))
using (var searcher = IndexInitializer.GetUmbracoSearcher(writer))
{ {
var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir); //var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir);
indexer.RebuildIndex(); indexer.RebuildIndex();
var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir); //var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir);
var ctx = GetUmbracoContext("/test", 1234); var ctx = GetUmbracoContext("/test", 1234);
var cache = new ContextualPublishedMediaCache(new PublishedMediaCache(ctx.Application, searcher, indexer), ctx); var cache = new ContextualPublishedMediaCache(new PublishedMediaCache(ctx.Application, searcher, indexer), ctx);
@@ -241,12 +257,15 @@ namespace Umbraco.Tests.PublishedContent
[Test] [Test]
public void Ancestors_With_Examine() public void Ancestors_With_Examine()
{ {
using (var luceneDir = new RAMDirectory()) using (var luceneDir = new RandomIdRAMDirectory())
using (var writer = new IndexWriter(luceneDir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), IndexWriter.MaxFieldLength.LIMITED))
using (var indexer = IndexInitializer.GetUmbracoIndexer(writer))
using (var searcher = IndexInitializer.GetUmbracoSearcher(writer))
{ {
var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir); //var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir);
indexer.RebuildIndex(); indexer.RebuildIndex();
var ctx = GetUmbracoContext("/test", 1234); var ctx = GetUmbracoContext("/test", 1234);
var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir); //var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir);
var cache = new ContextualPublishedMediaCache(new PublishedMediaCache(ctx.Application, searcher, indexer), ctx); var cache = new ContextualPublishedMediaCache(new PublishedMediaCache(ctx.Application, searcher, indexer), ctx);
//we are using the media.xml media to test the examine results implementation, see the media.xml file in the ExamineHelpers namespace //we are using the media.xml media to test the examine results implementation, see the media.xml file in the ExamineHelpers namespace
@@ -260,12 +279,15 @@ namespace Umbraco.Tests.PublishedContent
[Test] [Test]
public void AncestorsOrSelf_With_Examine() public void AncestorsOrSelf_With_Examine()
{ {
using (var luceneDir = new RAMDirectory()) using (var luceneDir = new RandomIdRAMDirectory())
using (var writer = new IndexWriter(luceneDir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), IndexWriter.MaxFieldLength.LIMITED))
using (var indexer = IndexInitializer.GetUmbracoIndexer(writer))
using (var searcher = IndexInitializer.GetUmbracoSearcher(writer))
{ {
var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir); //var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir);
indexer.RebuildIndex(); indexer.RebuildIndex();
var ctx = GetUmbracoContext("/test", 1234); var ctx = GetUmbracoContext("/test", 1234);
var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir); //var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir);
var cache = new ContextualPublishedMediaCache(new PublishedMediaCache(ctx.Application, searcher, indexer), ctx); var cache = new ContextualPublishedMediaCache(new PublishedMediaCache(ctx.Application, searcher, indexer), ctx);
//we are using the media.xml media to test the examine results implementation, see the media.xml file in the ExamineHelpers namespace //we are using the media.xml media to test the examine results implementation, see the media.xml file in the ExamineHelpers namespace

View File

@@ -164,6 +164,7 @@
<Compile Include="Routing\NiceUrlRoutesTests.cs" /> <Compile Include="Routing\NiceUrlRoutesTests.cs" />
<Compile Include="TestHelpers\Entities\MockedPropertyTypes.cs" /> <Compile Include="TestHelpers\Entities\MockedPropertyTypes.cs" />
<Compile Include="TryConvertToTests.cs" /> <Compile Include="TryConvertToTests.cs" />
<Compile Include="UmbracoExamine\RandomIdRAMDirectory.cs" />
<Compile Include="UmbracoExamine\UmbracoContentIndexerTests.cs" /> <Compile Include="UmbracoExamine\UmbracoContentIndexerTests.cs" />
<Compile Include="Web\AngularIntegration\AngularAntiForgeryTests.cs" /> <Compile Include="Web\AngularIntegration\AngularAntiForgeryTests.cs" />
<Compile Include="Web\AngularIntegration\ContentModelSerializationTests.cs" /> <Compile Include="Web\AngularIntegration\ContentModelSerializationTests.cs" />

View File

@@ -1,6 +1,8 @@
using System; using System;
using System.Linq; using System.Linq;
using Examine; using Examine;
using Lucene.Net.Analysis.Standard;
using Lucene.Net.Index;
using Lucene.Net.Store; using Lucene.Net.Store;
using NUnit.Framework; using NUnit.Framework;
using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers;
@@ -15,53 +17,39 @@ namespace Umbraco.Tests.UmbracoExamine
[Test] [Test]
public void Events_Ignoring_Node() public void Events_Ignoring_Node()
{ {
//change the parent id so that they are all ignored using (var luceneDir = new RandomIdRAMDirectory())
var existingCriteria = _indexer.IndexerData; using (var writer = new IndexWriter(luceneDir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), IndexWriter.MaxFieldLength.LIMITED))
_indexer.IndexerData = new IndexCriteria(existingCriteria.StandardFields, existingCriteria.UserFields, existingCriteria.IncludeNodeTypes, existingCriteria.ExcludeNodeTypes, using (var indexer = IndexInitializer.GetUmbracoIndexer(writer))
999); //change to 999 using (var searcher = IndexInitializer.GetUmbracoSearcher(writer))
{
//change the parent id so that they are all ignored
var existingCriteria = indexer.IndexerData;
indexer.IndexerData = new IndexCriteria(existingCriteria.StandardFields, existingCriteria.UserFields, existingCriteria.IncludeNodeTypes, existingCriteria.ExcludeNodeTypes,
999); //change to 999
var isIgnored = false; var isIgnored = false;
EventHandler<IndexingNodeDataEventArgs> ignoringNode = (s, e) => EventHandler<IndexingNodeDataEventArgs> ignoringNode = (s, e) =>
{ {
isIgnored = true; isIgnored = true;
}; };
_indexer.IgnoringNode += ignoringNode; indexer.IgnoringNode += ignoringNode;
//get a node from the data repo //get a node from the data repo
var node = _contentService.GetPublishedContentByXPath("//*[string-length(@id)>0 and number(@id)>0]") var node = _contentService.GetPublishedContentByXPath("//*[string-length(@id)>0 and number(@id)>0]")
.Root .Root
.Elements() .Elements()
.First(); .First();
_indexer.ReIndexNode(node, IndexTypes.Content); indexer.ReIndexNode(node, IndexTypes.Content);
Assert.IsTrue(isIgnored); Assert.IsTrue(isIgnored);
}
} }
private readonly TestContentService _contentService = new TestContentService(); private readonly TestContentService _contentService = new TestContentService();
private static UmbracoExamineSearcher _searcher;
private static UmbracoContentIndexer _indexer;
private Lucene.Net.Store.Directory _luceneDir;
public override void Initialize()
{
base.Initialize();
_luceneDir = new RAMDirectory();
_indexer = IndexInitializer.GetUmbracoIndexer(_luceneDir);
_indexer.RebuildIndex();
_searcher = IndexInitializer.GetUmbracoSearcher(_luceneDir);
}
public override void TearDown()
{
base.TearDown();
_luceneDir.Dispose();
}
} }
} }

View File

@@ -7,6 +7,7 @@ using Examine.LuceneEngine.Config;
using Examine.LuceneEngine.Providers; using Examine.LuceneEngine.Providers;
using Lucene.Net.Analysis; using Lucene.Net.Analysis;
using Lucene.Net.Analysis.Standard; using Lucene.Net.Analysis.Standard;
using Lucene.Net.Index;
using Lucene.Net.Store; using Lucene.Net.Store;
using Moq; using Moq;
using Umbraco.Core; using Umbraco.Core;
@@ -33,7 +34,7 @@ namespace Umbraco.Tests.UmbracoExamine
internal static class IndexInitializer internal static class IndexInitializer
{ {
public static UmbracoContentIndexer GetUmbracoIndexer( public static UmbracoContentIndexer GetUmbracoIndexer(
Directory luceneDir, IndexWriter writer,
Analyzer analyzer = null, Analyzer analyzer = null,
IDataService dataService = null, IDataService dataService = null,
IContentService contentService = null, IContentService contentService = null,
@@ -178,15 +179,14 @@ namespace Umbraco.Tests.UmbracoExamine
var indexCriteria = indexSet.ToIndexCriteria(dataService, UmbracoContentIndexer.IndexFieldPolicies); var indexCriteria = indexSet.ToIndexCriteria(dataService, UmbracoContentIndexer.IndexFieldPolicies);
var i = new UmbracoContentIndexer(indexCriteria, var i = new UmbracoContentIndexer(indexCriteria,
luceneDir, //custom lucene directory writer,
dataService, dataService,
contentService, contentService,
mediaService, mediaService,
dataTypeService, dataTypeService,
userService, userService,
contentTypeService, contentTypeService,
analyzer, false)
false)
{ {
SupportUnpublishedContent = supportUnpublishedContent SupportUnpublishedContent = supportUnpublishedContent
}; };
@@ -197,13 +197,14 @@ namespace Umbraco.Tests.UmbracoExamine
return i; return i;
} }
public static UmbracoExamineSearcher GetUmbracoSearcher(Directory luceneDir, Analyzer analyzer = null)
public static UmbracoExamineSearcher GetUmbracoSearcher(IndexWriter writer, Analyzer analyzer = null)
{ {
if (analyzer == null) if (analyzer == null)
{ {
analyzer = new StandardAnalyzer(Version.LUCENE_29); analyzer = new StandardAnalyzer(Version.LUCENE_29);
} }
return new UmbracoExamineSearcher(luceneDir, analyzer); return new UmbracoExamineSearcher(writer, analyzer);
} }
public static LuceneSearcher GetLuceneSearcher(Directory luceneDir) public static LuceneSearcher GetLuceneSearcher(Directory luceneDir)

View File

@@ -1,11 +1,11 @@
using System; using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using Examine; using Examine;
using Examine.LuceneEngine; using Examine.LuceneEngine;
using Examine.LuceneEngine.Providers; using Examine.LuceneEngine.Providers;
using Examine.LuceneEngine.SearchCriteria; using Examine.LuceneEngine.SearchCriteria;
using Examine.SearchCriteria; using Examine.SearchCriteria;
using Lucene.Net.Analysis.Standard;
using Lucene.Net.Index; using Lucene.Net.Index;
using Lucene.Net.Search; using Lucene.Net.Search;
using Lucene.Net.Store; using Lucene.Net.Store;
@@ -15,7 +15,6 @@ using UmbracoExamine;
namespace Umbraco.Tests.UmbracoExamine namespace Umbraco.Tests.UmbracoExamine
{ {
/// <summary> /// <summary>
/// Tests the standard indexing capabilities /// Tests the standard indexing capabilities
/// </summary> /// </summary>
@@ -30,9 +29,10 @@ namespace Umbraco.Tests.UmbracoExamine
public void Index_Protected_Content_Not_Indexed() public void Index_Protected_Content_Not_Indexed()
{ {
using (var luceneDir = new RAMDirectory()) using (var luceneDir = new RandomIdRAMDirectory())
using (var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir)) using (var writer = new IndexWriter(luceneDir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), IndexWriter.MaxFieldLength.LIMITED))
using (var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir)) using (var indexer = IndexInitializer.GetUmbracoIndexer(writer))
using (var searcher = IndexInitializer.GetUmbracoSearcher(writer))
{ {
indexer.RebuildIndex(); indexer.RebuildIndex();
@@ -59,9 +59,10 @@ namespace Umbraco.Tests.UmbracoExamine
[Test] [Test]
public void Index_Move_Media_From_Non_Indexable_To_Indexable_ParentID() public void Index_Move_Media_From_Non_Indexable_To_Indexable_ParentID()
{ {
using (var luceneDir = new RAMDirectory()) using (var luceneDir = new RandomIdRAMDirectory())
using (var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir)) using (var writer = new IndexWriter(luceneDir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), IndexWriter.MaxFieldLength.LIMITED))
using (var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir)) using (var indexer = IndexInitializer.GetUmbracoIndexer(writer))
using (var searcher = IndexInitializer.GetUmbracoSearcher(writer))
{ {
indexer.RebuildIndex(); indexer.RebuildIndex();
@@ -77,7 +78,7 @@ namespace Umbraco.Tests.UmbracoExamine
//ensure that node 2112 doesn't exist //ensure that node 2112 doesn't exist
var results = searcher.Search(searcher.CreateSearchCriteria().Id(2112).Compile()); var results = searcher.Search(searcher.CreateSearchCriteria().Id(2112).Compile());
Assert.AreEqual(0, results.Count()); Assert.AreEqual(0, results.TotalItemCount);
//get a node from the data repo (this one exists underneath 2222) //get a node from the data repo (this one exists underneath 2222)
var node = mediaService.GetLatestMediaByXpath("//*[string-length(@id)>0 and number(@id)>0]") var node = mediaService.GetLatestMediaByXpath("//*[string-length(@id)>0 and number(@id)>0]")
@@ -103,19 +104,19 @@ namespace Umbraco.Tests.UmbracoExamine
//now ensure it's deleted //now ensure it's deleted
var newResults = searcher.Search(searcher.CreateSearchCriteria().Id(2112).Compile()); var newResults = searcher.Search(searcher.CreateSearchCriteria().Id(2112).Compile());
Assert.AreEqual(1, newResults.Count()); Assert.AreEqual(1, newResults.TotalItemCount);
} }
} }
[Test] [Test]
[Ignore]
public void Index_Move_Media_To_Non_Indexable_ParentID() public void Index_Move_Media_To_Non_Indexable_ParentID()
{ {
using (var luceneDir = new RAMDirectory()) using (var luceneDir = new RandomIdRAMDirectory())
using (var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir)) using (var writer = new IndexWriter(luceneDir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), IndexWriter.MaxFieldLength.LIMITED))
using (var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir)) using (var indexer = IndexInitializer.GetUmbracoIndexer(writer))
using (var searcher = IndexInitializer.GetUmbracoSearcher(writer))
{ {
indexer.RebuildIndex(); indexer.RebuildIndex();
@@ -152,7 +153,7 @@ namespace Umbraco.Tests.UmbracoExamine
//now ensure it's deleted //now ensure it's deleted
var results = searcher.Search(searcher.CreateSearchCriteria().Id(2112).Compile()); var results = searcher.Search(searcher.CreateSearchCriteria().Id(2112).Compile());
Assert.AreEqual(0, results.Count()); Assert.AreEqual(0, results.TotalItemCount);
} }
} }
@@ -164,9 +165,10 @@ namespace Umbraco.Tests.UmbracoExamine
[Test] [Test]
public void Index_Reindex_Content() public void Index_Reindex_Content()
{ {
using (var luceneDir = new RAMDirectory()) using (var luceneDir = new RandomIdRAMDirectory())
using (var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir, supportUnpublishedContent:true)) using (var writer = new IndexWriter(luceneDir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), IndexWriter.MaxFieldLength.LIMITED))
using (var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir)) using (var indexer = IndexInitializer.GetUmbracoIndexer(writer, supportUnpublishedContent: true))
using (var searcher = IndexInitializer.GetUmbracoSearcher(writer))
{ {
indexer.RebuildIndex(); indexer.RebuildIndex();
@@ -175,10 +177,9 @@ namespace Umbraco.Tests.UmbracoExamine
//first delete all 'Content' (not media). This is done by directly manipulating the index with the Lucene API, not examine! //first delete all 'Content' (not media). This is done by directly manipulating the index with the Lucene API, not examine!
var contentTerm = new Term(LuceneIndexer.IndexTypeFieldName, IndexTypes.Content); var contentTerm = new Term(LuceneIndexer.IndexTypeFieldName, IndexTypes.Content);
var writer = indexer.GetIndexWriter();
writer.DeleteDocuments(contentTerm); writer.DeleteDocuments(contentTerm);
writer.Commit(); writer.Commit();
//make sure the content is gone. This is done with lucene APIs, not examine! //make sure the content is gone. This is done with lucene APIs, not examine!
var collector = new AllHitsCollector(false, true); var collector = new AllHitsCollector(false, true);
var query = new TermQuery(contentTerm); var query = new TermQuery(contentTerm);
@@ -205,13 +206,13 @@ namespace Umbraco.Tests.UmbracoExamine
/// This will delete an item from the index and ensure that all children of the node are deleted too! /// This will delete an item from the index and ensure that all children of the node are deleted too!
/// </summary> /// </summary>
[Test] [Test]
[Ignore]
public void Index_Delete_Index_Item_Ensure_Heirarchy_Removed() public void Index_Delete_Index_Item_Ensure_Heirarchy_Removed()
{ {
using (var luceneDir = new RAMDirectory()) using (var luceneDir = new RandomIdRAMDirectory())
using (var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir)) using (var writer = new IndexWriter(luceneDir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), IndexWriter.MaxFieldLength.LIMITED))
using (var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir)) using (var indexer = IndexInitializer.GetUmbracoIndexer(writer))
using (var searcher = IndexInitializer.GetUmbracoSearcher(writer))
{ {
indexer.RebuildIndex(); indexer.RebuildIndex();
@@ -221,10 +222,10 @@ namespace Umbraco.Tests.UmbracoExamine
//this node had children: 1141 & 1142, let's ensure they are also removed //this node had children: 1141 & 1142, let's ensure they are also removed
var results = searcher.Search(searcher.CreateSearchCriteria().Id(1141).Compile()); var results = searcher.Search(searcher.CreateSearchCriteria().Id(1141).Compile());
Assert.AreEqual(0, results.Count()); Assert.AreEqual(0, results.TotalItemCount);
results = searcher.Search(searcher.CreateSearchCriteria().Id(1142).Compile()); results = searcher.Search(searcher.CreateSearchCriteria().Id(1142).Compile());
Assert.AreEqual(0, results.Count()); Assert.AreEqual(0, results.TotalItemCount);
} }
} }

View File

@@ -0,0 +1,14 @@
using System;
using Lucene.Net.Store;
namespace Umbraco.Tests.UmbracoExamine
{
public class RandomIdRAMDirectory : RAMDirectory
{
private readonly string _lockId = Guid.NewGuid().ToString();
public override string GetLockID()
{
return _lockId;
}
}
}

View File

@@ -8,6 +8,8 @@ using Examine.LuceneEngine.Providers;
using Lucene.Net.Store; using Lucene.Net.Store;
using NUnit.Framework; using NUnit.Framework;
using Examine.LuceneEngine.SearchCriteria; using Examine.LuceneEngine.SearchCriteria;
using Lucene.Net.Analysis.Standard;
using Lucene.Net.Index;
using Umbraco.Tests.TestHelpers; using Umbraco.Tests.TestHelpers;
namespace Umbraco.Tests.UmbracoExamine namespace Umbraco.Tests.UmbracoExamine
@@ -20,16 +22,17 @@ namespace Umbraco.Tests.UmbracoExamine
[Test] [Test]
public void Test_Sort_Order_Sorting() public void Test_Sort_Order_Sorting()
{ {
using (var luceneDir = new RAMDirectory()) using (var luceneDir = new RandomIdRAMDirectory())
{ using (var writer = new IndexWriter(luceneDir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29), IndexWriter.MaxFieldLength.LIMITED))
var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir, null, using (var indexer = IndexInitializer.GetUmbracoIndexer(writer, null,
new TestDataService() new TestDataService()
{ {
ContentService = new TestContentService(TestFiles.umbraco_sort) ContentService = new TestContentService(TestFiles.umbraco_sort)
}, },
supportUnpublishedContent:true); supportUnpublishedContent: true))
indexer.RebuildIndex(); using (var searcher = IndexInitializer.GetUmbracoSearcher(writer))
var searcher = IndexInitializer.GetUmbracoSearcher(luceneDir); {
indexer.RebuildIndex();
var s = (LuceneSearcher)searcher; var s = (LuceneSearcher)searcher;
var luceneSearcher = s.GetSearcher(); var luceneSearcher = s.GetSearcher();

View File

@@ -49,6 +49,7 @@ namespace UmbracoExamine
/// <param name="indexPath"></param> /// <param name="indexPath"></param>
/// <param name="dataService"></param> /// <param name="dataService"></param>
/// <param name="analyzer"></param> /// <param name="analyzer"></param>
/// <param name="async"></param>
protected BaseUmbracoIndexer(IIndexCriteria indexerData, DirectoryInfo indexPath, IDataService dataService, Analyzer analyzer, bool async) protected BaseUmbracoIndexer(IIndexCriteria indexerData, DirectoryInfo indexPath, IDataService dataService, Analyzer analyzer, bool async)
: base(indexerData, indexPath, analyzer, async) : base(indexerData, indexPath, analyzer, async)
{ {
@@ -61,6 +62,19 @@ namespace UmbracoExamine
DataService = dataService; DataService = dataService;
} }
/// <summary>
/// Creates an NRT indexer
/// </summary>
/// <param name="indexerData"></param>
/// <param name="writer"></param>
/// <param name="async"></param>
/// <param name="dataService"></param>
protected BaseUmbracoIndexer(IIndexCriteria indexerData, IndexWriter writer, IDataService dataService, bool async)
: base(indexerData, writer, async)
{
DataService = dataService;
}
#endregion #endregion
/// <summary> /// <summary>

View File

@@ -17,6 +17,7 @@ using Examine.LuceneEngine;
using Examine.LuceneEngine.Config; using Examine.LuceneEngine.Config;
using UmbracoExamine.Config; using UmbracoExamine.Config;
using Lucene.Net.Analysis; using Lucene.Net.Analysis;
using Lucene.Net.Index;
using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.Querying;
using IContentService = Umbraco.Core.Services.IContentService; using IContentService = Umbraco.Core.Services.IContentService;
using IMediaService = Umbraco.Core.Services.IMediaService; using IMediaService = Umbraco.Core.Services.IMediaService;
@@ -146,6 +147,34 @@ namespace UmbracoExamine
_contentTypeService = contentTypeService; _contentTypeService = contentTypeService;
} }
/// <summary>
/// Creates an NRT indexer
/// </summary>
/// <param name="indexerData"></param>
/// <param name="writer"></param>
/// <param name="dataService"></param>
/// <param name="contentTypeService"></param>
/// <param name="async"></param>
/// <param name="contentService"></param>
/// <param name="mediaService"></param>
/// <param name="dataTypeService"></param>
/// <param name="userService"></param>
public UmbracoContentIndexer(IIndexCriteria indexerData, IndexWriter writer, IDataService dataService,
IContentService contentService,
IMediaService mediaService,
IDataTypeService dataTypeService,
IUserService userService,
IContentTypeService contentTypeService,
bool async)
: base(indexerData, writer, dataService, async)
{
_contentService = contentService;
_mediaService = mediaService;
_dataTypeService = dataTypeService;
_userService = userService;
_contentTypeService = contentTypeService;
}
#endregion #endregion
#region Constants & Fields #region Constants & Fields

View File

@@ -51,12 +51,41 @@ namespace UmbracoExamine
/// </summary> /// </summary>
public override string Name public override string Name
{ {
get get { return _name; }
{ }
return _name;
} /// <summary>
/// Constructor to allow for creating an indexer at runtime
/// </summary>
/// <param name="indexPath"></param>
/// <param name="analyzer"></param>
public UmbracoExamineSearcher(DirectoryInfo indexPath, Analyzer analyzer)
: base(indexPath, analyzer)
{
} }
/// <summary>
/// Constructor to allow for creating an indexer at runtime
/// </summary>
/// <param name="luceneDirectory"></param>
/// <param name="analyzer"></param>
public UmbracoExamineSearcher(Lucene.Net.Store.Directory luceneDirectory, Analyzer analyzer)
: base(luceneDirectory, analyzer)
{
}
/// <summary>
/// Creates an NRT searcher
/// </summary>
/// <param name="writer"></param>
/// <param name="analyzer"></param>
public UmbracoExamineSearcher(IndexWriter writer, Analyzer analyzer)
: base(writer, analyzer)
{
}
#endregion
public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)
{ {
@@ -115,30 +144,6 @@ namespace UmbracoExamine
} }
} }
/// <summary>
/// Constructor to allow for creating an indexer at runtime
/// </summary>
/// <param name="indexPath"></param>
/// <param name="analyzer"></param>
public UmbracoExamineSearcher(DirectoryInfo indexPath, Analyzer analyzer)
: base(indexPath, analyzer)
{
}
/// <summary>
/// Constructor to allow for creating an indexer at runtime
/// </summary>
/// <param name="luceneDirectory"></param>
/// <param name="analyzer"></param>
public UmbracoExamineSearcher(Lucene.Net.Store.Directory luceneDirectory, Analyzer analyzer)
: base(luceneDirectory, analyzer)
{
}
#endregion
/// <summary> /// <summary>
/// Used for unit tests /// Used for unit tests
/// </summary> /// </summary>