diff --git a/src/Umbraco.Tests/App.config b/src/Umbraco.Tests/App.config
index 916277329e..918335bf91 100644
--- a/src/Umbraco.Tests/App.config
+++ b/src/Umbraco.Tests/App.config
@@ -200,6 +200,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs b/src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs
index 87aaa3d84a..60ca8b4804 100644
--- a/src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs
+++ b/src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs
@@ -148,7 +148,7 @@ namespace Umbraco.Tests.Cache.PublishedCache
var result = new SearchResult()
{
- Id = 1234,
+ LongId = 1234,
Score = 1
};
result.Fields.Add("__IndexType", "media");
diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj
index d079b3bb83..9f27e172c6 100644
--- a/src/Umbraco.Tests/Umbraco.Tests.csproj
+++ b/src/Umbraco.Tests/Umbraco.Tests.csproj
@@ -55,8 +55,8 @@
..\packages\AutoMapper.4.2.1\lib\net45\AutoMapper.dll
True
-
- ..\packages\Examine.0.1.68.0\lib\Examine.dll
+
+ ..\packages\Examine.2.0.0-beta8\lib\net45\Examine.dll
True
@@ -71,9 +71,49 @@
..\packages\log4net.2.0.5\lib\net45-full\log4net.dll
True
-
- False
- ..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll
+
+ ..\packages\Lucene.Net.3.0.3\lib\NET40\Lucene.Net.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Analyzers.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Core.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.FastVectorHighlighter.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Highlighter.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Memory.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Queries.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Regex.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.SimpleFacetedSearch.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Snowball.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.SpellChecker.dll
+ True
..\packages\Microsoft.Owin.3.0.1\lib\net45\Microsoft.Owin.dll
diff --git a/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs b/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs
index 5fed998194..2fe3b275cf 100644
--- a/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs
+++ b/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs
@@ -13,8 +13,6 @@ namespace Umbraco.Tests.UmbracoExamine
[SetUp]
public virtual void TestSetup()
{
- UmbracoExamineSearcher.DisableInitializationCheck = true;
- BaseUmbracoIndexer.DisableInitializationCheck = true;
ShortStringHelperResolver.Current = new ShortStringHelperResolver(new DefaultShortStringHelper(SettingsForTests.GetDefault()));
Resolution.Freeze();
@@ -23,9 +21,6 @@ namespace Umbraco.Tests.UmbracoExamine
[TearDown]
public virtual void TestTearDown()
{
- UmbracoExamineSearcher.DisableInitializationCheck = null;
- BaseUmbracoIndexer.DisableInitializationCheck = null;
-
//reset all resolvers
ResolverCollection.ResetAll();
//reset resolution itself (though this should be taken care of by resetting any of the resolvers above)
diff --git a/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs b/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs
index d045645726..76d9dbe1ec 100644
--- a/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs
+++ b/src/Umbraco.Tests/UmbracoExamine/IndexInitializer.cs
@@ -91,25 +91,38 @@ namespace Umbraco.Tests.UmbracoExamine
if (analyzer == null)
{
- analyzer = new StandardAnalyzer(Version.LUCENE_29);
+ analyzer = new StandardAnalyzer(Version.LUCENE_30);
}
- var indexSet = new IndexSet();
- var indexCriteria = indexSet.ToIndexCriteria(dataService, UmbracoContentIndexer.IndexFieldPolicies);
-
- var i = new UmbracoContentIndexer(indexCriteria,
- luceneDir, //custom lucene directory
- dataService,
- contentService,
- mediaService,
- dataTypeService,
- userService,
- new[] { new DefaultUrlSegmentProvider() },
- analyzer,
- false);
+ //var indexSet = new IndexSet();
+ // var indexCriteria = indexSet.ToIndexCriteria(dataService, UmbracoContentIndexer.IndexFieldPolicies);
+
+ //var i = new UmbracoContentIndexer(indexCriteria,
+ // luceneDir, //custom lucene directory
+ // dataService,
+ // contentService,
+ // mediaService,
+ // dataTypeService,
+ // userService,
+ // new[] { new DefaultUrlSegmentProvider() },
+ // analyzer,
+ // false);
//i.IndexSecondsInterval = 1;
+ var i = new UmbracoContentIndexer(
+ new[]
+ {
+ new FieldDefinition("", FieldDefinitionTypes.FullText)
+ },
+ luceneDir,
+ analyzer,
+ contentService,
+ mediaService,
+ dataTypeService,
+ userService,
+ new[] { new DefaultUrlSegmentProvider() });
+
i.IndexingError += IndexingError;
return i;
diff --git a/src/Umbraco.Tests/UmbracoExamine/IndexTest.cs b/src/Umbraco.Tests/UmbracoExamine/IndexTest.cs
index cfde313968..fcb202767b 100644
--- a/src/Umbraco.Tests/UmbracoExamine/IndexTest.cs
+++ b/src/Umbraco.Tests/UmbracoExamine/IndexTest.cs
@@ -3,14 +3,20 @@ using System.Collections.Generic;
using System.Linq;
using Examine;
using Examine.LuceneEngine;
+using Examine.LuceneEngine.Config;
using Examine.LuceneEngine.Providers;
using Examine.LuceneEngine.SearchCriteria;
using Examine.SearchCriteria;
+using Lucene.Net.Analysis.Standard;
using Lucene.Net.Index;
using Lucene.Net.Search;
using Lucene.Net.Store;
+using Moq;
using NUnit.Framework;
+using Umbraco.Core.Services;
+using Umbraco.Core.Strings;
using UmbracoExamine;
+using Version = Lucene.Net.Util.Version;
namespace Umbraco.Tests.UmbracoExamine
{
@@ -30,22 +36,27 @@ namespace Umbraco.Tests.UmbracoExamine
public void Index_Protected_Content_Not_Indexed()
{
- var protectedQuery = new BooleanQuery();
- protectedQuery.Add(
- new BooleanClause(
- new TermQuery(new Term(LuceneIndexer.IndexTypeFieldName, IndexTypes.Content)),
- BooleanClause.Occur.MUST));
+ using (var luceneDir = new RAMDirectory())
+ using (var indexer = IndexInitializer.GetUmbracoIndexer(luceneDir))
+ using (var searcher = indexer.GetSearcher().GetSearcher())
+ {
+ var protectedQuery = new BooleanQuery();
+ protectedQuery.Add(
+ new BooleanClause(
+ new TermQuery(new Term(LuceneIndexer.IndexTypeFieldName, IndexTypes.Content)),
+ Occur.MUST));
- protectedQuery.Add(
- new BooleanClause(
- new TermQuery(new Term(LuceneIndexer.IndexNodeIdFieldName, TestContentService.ProtectedNode.ToString())),
- BooleanClause.Occur.MUST));
+ protectedQuery.Add(
+ new BooleanClause(
+ new TermQuery(new Term(LuceneIndexer.IndexNodeIdFieldName, TestContentService.ProtectedNode.ToString())),
+ Occur.MUST));
- var collector = new AllHitsCollector(false, true);
- var s = _searcher.GetSearcher();
- s.Search(protectedQuery, collector);
+ var collector = TopScoreDocCollector.Create(int.MaxValue, true);
+
+ searcher.Search(protectedQuery, collector);
- Assert.AreEqual(0, collector.Count, "Protected node should not be indexed");
+ Assert.AreEqual(0, collector.TotalHits, "Protected node should not be indexed");
+ }
}
@@ -142,8 +153,6 @@ namespace Umbraco.Tests.UmbracoExamine
{
var s = (IndexSearcher)_searcher.GetSearcher();
-
-
//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);
@@ -197,30 +206,29 @@ namespace Umbraco.Tests.UmbracoExamine
private readonly TestMediaService _mediaService = new TestMediaService();
- private static UmbracoExamineSearcher _searcher;
- private static UmbracoContentIndexer _indexer;
+ //private static UmbracoExamineSearcher _searcher;
+ //private static UmbracoContentIndexer _indexer;
#endregion
#region Initialize and Cleanup
- private Lucene.Net.Store.Directory _luceneDir;
+ //private Lucene.Net.Store.Directory _luceneDir;
public override void TestTearDown()
{
base.TestTearDown();
- _luceneDir.Dispose();
- UmbracoExamineSearcher.DisableInitializationCheck = null;
- BaseUmbracoIndexer.DisableInitializationCheck = null;
+ //_luceneDir.Dispose();
}
public override void TestSetup()
{
base.TestSetup();
- _luceneDir = new RAMDirectory();
- _indexer = IndexInitializer.GetUmbracoIndexer(_luceneDir);
- _indexer.RebuildIndex();
- _searcher = IndexInitializer.GetUmbracoSearcher(_luceneDir);
+ //_luceneDir = new RAMDirectory();
+
+ // _indexer = IndexInitializer.GetUmbracoIndexer(_luceneDir);
+ //_indexer.RebuildIndex();
+ //_searcher = IndexInitializer.GetUmbracoSearcher(_luceneDir);
}
diff --git a/src/Umbraco.Tests/packages.config b/src/Umbraco.Tests/packages.config
index 7b5780daa2..005aa46c82 100644
--- a/src/Umbraco.Tests/packages.config
+++ b/src/Umbraco.Tests/packages.config
@@ -2,10 +2,11 @@
-
+
-
+
+
diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
index 0b89ed19a5..1f29eb2227 100644
--- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
+++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
@@ -120,8 +120,8 @@
..\packages\ClientDependency-Mvc5.1.8.0.0\lib\net45\ClientDependency.Core.Mvc.dll
True
-
- ..\packages\Examine.0.1.68.0\lib\Examine.dll
+
+ ..\packages\Examine.2.0.0-beta8\lib\net45\Examine.dll
True
@@ -140,9 +140,49 @@
..\packages\log4net.2.0.5\lib\net45-full\log4net.dll
True
-
- False
- ..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll
+
+ ..\packages\Lucene.Net.3.0.3\lib\NET40\Lucene.Net.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Analyzers.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Core.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.FastVectorHighlighter.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Highlighter.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Memory.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Queries.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Regex.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.SimpleFacetedSearch.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Snowball.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.SpellChecker.dll
+ True
..\packages\Microsoft.AspNet.Identity.Core.2.2.1\lib\net45\Microsoft.AspNet.Identity.Core.dll
diff --git a/src/Umbraco.Web.UI/packages.config b/src/Umbraco.Web.UI/packages.config
index 43d9348b81..e76bb67d87 100644
--- a/src/Umbraco.Web.UI/packages.config
+++ b/src/Umbraco.Web.UI/packages.config
@@ -3,11 +3,12 @@
-
+
-
+
+
diff --git a/src/Umbraco.Web.UI/web.Template.config b/src/Umbraco.Web.UI/web.Template.config
index ff221c2efe..a3d059a62f 100644
--- a/src/Umbraco.Web.UI/web.Template.config
+++ b/src/Umbraco.Web.UI/web.Template.config
@@ -409,7 +409,10 @@
-
+
+
+
+
diff --git a/src/Umbraco.Web/Search/LuceneIndexerExtensions.cs b/src/Umbraco.Web/Search/LuceneIndexerExtensions.cs
index 3cc7908dfd..66704d0c8b 100644
--- a/src/Umbraco.Web/Search/LuceneIndexerExtensions.cs
+++ b/src/Umbraco.Web/Search/LuceneIndexerExtensions.cs
@@ -21,7 +21,10 @@ namespace Umbraco.Web.Search
///
public static int GetIndexDocumentCount(this LuceneIndexer indexer)
{
- using (var reader = indexer.GetIndexWriter().GetReader())
+ var searcher = indexer.GetSearcher().GetSearcher() as IndexSearcher;
+ if (searcher == null) return 0;
+ using (searcher)
+ using (var reader = searcher.IndexReader)
{
return reader.NumDocs();
}
@@ -34,7 +37,10 @@ namespace Umbraco.Web.Search
///
public static int GetIndexFieldCount(this LuceneIndexer indexer)
{
- using (var reader = indexer.GetIndexWriter().GetReader())
+ var searcher = indexer.GetSearcher().GetSearcher() as IndexSearcher;
+ if (searcher == null) return 0;
+ using (searcher)
+ using (var reader = searcher.IndexReader)
{
return reader.GetFieldNames(IndexReader.FieldOption.ALL).Count;
}
@@ -47,7 +53,10 @@ namespace Umbraco.Web.Search
///
public static bool IsIndexOptimized(this LuceneIndexer indexer)
{
- using (var reader = indexer.GetIndexWriter().GetReader())
+ var searcher = indexer.GetSearcher().GetSearcher() as IndexSearcher;
+ if (searcher == null) return true;
+ using (searcher)
+ using (var reader = searcher.IndexReader)
{
return reader.IsOptimized();
}
@@ -74,9 +83,12 @@ namespace Umbraco.Web.Search
///
public static int GetDeletedDocumentsCount(this LuceneIndexer indexer)
{
- using (var reader = indexer.GetIndexWriter().GetReader())
+ var searcher = indexer.GetSearcher().GetSearcher() as IndexSearcher;
+ if (searcher == null) return 0;
+ using (searcher)
+ using (var reader = searcher.IndexReader)
{
- return reader.NumDeletedDocs();
+ return reader.NumDeletedDocs;
}
}
}
diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj
index 7dd0f6b41d..d233c6a606 100644
--- a/src/Umbraco.Web/Umbraco.Web.csproj
+++ b/src/Umbraco.Web/Umbraco.Web.csproj
@@ -113,9 +113,8 @@
..\packages\dotless.1.4.1.0\lib\dotless.Core.dll
-
- ..\packages\Examine.0.1.68.0\lib\Examine.dll
- False
+
+ ..\packages\Examine.2.0.0-beta8\lib\net45\Examine.dll
True
@@ -146,9 +145,49 @@
..\packages\log4net.2.0.5\lib\net45-full\log4net.dll
True
-
- False
- ..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll
+
+ ..\packages\Lucene.Net.3.0.3\lib\NET40\Lucene.Net.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Analyzers.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Core.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.FastVectorHighlighter.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Highlighter.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Memory.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Queries.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Regex.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.SimpleFacetedSearch.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Snowball.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.SpellChecker.dll
+ True
..\packages\Markdown.1.14.4\lib\net45\MarkdownSharp.dll
diff --git a/src/Umbraco.Web/app.config b/src/Umbraco.Web/app.config
index 51ada1725b..00dbc98091 100644
--- a/src/Umbraco.Web/app.config
+++ b/src/Umbraco.Web/app.config
@@ -71,6 +71,14 @@
+
+
+
+
+
+
+
+
diff --git a/src/Umbraco.Web/packages.config b/src/Umbraco.Web/packages.config
index abafc5dcc2..c52a4112cf 100644
--- a/src/Umbraco.Web/packages.config
+++ b/src/Umbraco.Web/packages.config
@@ -3,14 +3,15 @@
-
+
-
+
+
diff --git a/src/UmbracoExamine/BaseUmbracoIndexer.cs b/src/UmbracoExamine/BaseUmbracoIndexer.cs
index ca0d3063d0..cb5323412a 100644
--- a/src/UmbracoExamine/BaseUmbracoIndexer.cs
+++ b/src/UmbracoExamine/BaseUmbracoIndexer.cs
@@ -12,8 +12,11 @@ using UmbracoExamine.DataServices;
using Examine;
using System.IO;
using System.Xml.Linq;
+using Examine.LuceneEngine.Faceting;
+using Examine.LuceneEngine.Indexing;
using Lucene.Net.Store;
using UmbracoExamine.LocalStorage;
+using Directory = Lucene.Net.Store.Directory;
namespace UmbracoExamine
{
@@ -34,31 +37,34 @@ namespace UmbracoExamine
{
}
- ///
- /// Constructor to allow for creating an indexer at runtime
- ///
- ///
- ///
- ///
- ///
- protected BaseUmbracoIndexer(IIndexCriteria indexerData, DirectoryInfo indexPath, IDataService dataService, Analyzer analyzer, bool async)
- : base(indexerData, indexPath, analyzer, async)
+ protected BaseUmbracoIndexer(IEnumerable fieldDefinitions, Directory luceneDirectory, Analyzer defaultAnalyzer, FacetConfiguration facetConfiguration = null, IDictionary> indexValueTypes = null)
+ : base(fieldDefinitions, luceneDirectory, defaultAnalyzer, facetConfiguration, indexValueTypes)
{
- DataService = dataService;
}
- protected BaseUmbracoIndexer(IIndexCriteria indexerData, Lucene.Net.Store.Directory luceneDirectory, IDataService dataService, Analyzer analyzer, bool async)
- : base(indexerData, luceneDirectory, analyzer, async)
- {
- DataService = dataService;
- }
+ // ///
+ // /// Constructor to allow for creating an indexer at runtime
+ // ///
+ // ///
+ // ///
+ // ///
+ // ///
+ // [Obsolete("Do not use the ctor using IIndexCriteria, it is obsolete")]
+ // protected BaseUmbracoIndexer(IIndexCriteria indexerData, DirectoryInfo indexPath, IDataService dataService, Analyzer analyzer, bool async)
+ // : base(indexerData, indexPath, analyzer, async)
+ // {
+ // DataService = dataService;
+ // }
+
+ // [Obsolete("Do not use the ctor using IIndexCriteria, it is obsolete")]
+ //protected BaseUmbracoIndexer(IIndexCriteria indexerData, Lucene.Net.Store.Directory luceneDirectory, IDataService dataService, Analyzer analyzer, bool async)
+ // : base(indexerData, luceneDirectory, analyzer, async)
+ //{
+ // DataService = dataService;
+ //}
#endregion
-
- ///
- /// Used for unit tests
- ///
- internal static bool? DisableInitializationCheck = null;
+
private readonly LocalTempStorageIndexer _localTempStorageIndexer = new LocalTempStorageIndexer();
private BaseLuceneSearcher _internalTempStorageSearcher = null;
@@ -89,6 +95,7 @@ namespace UmbracoExamine
///
public bool SupportUnpublishedContent { get; protected set; }
+ //TODO: Probably get rid of this right ?
///
/// The data service used for retreiving and submitting data to the cms
///
@@ -176,35 +183,7 @@ namespace UmbracoExamine
}
#endregion
-
- ///
- /// Used to aquire the internal searcher
- ///
- private readonly object _internalSearcherLocker = new object();
-
- protected override BaseSearchProvider InternalSearcher
- {
- get
- {
- //if temp local storage is configured use that, otherwise return the default
- if (UseTempStorage)
- {
- if (_internalTempStorageSearcher == null)
- {
- lock (_internalSearcherLocker)
- {
- if (_internalTempStorageSearcher == null)
- {
- _internalTempStorageSearcher = new LuceneSearcher(GetIndexWriter(), IndexingAnalyzer);
- }
- }
- }
- return _internalTempStorageSearcher;
- }
-
- return base.InternalSearcher;
- }
- }
+
public override Lucene.Net.Store.Directory GetLuceneDirectory()
{
@@ -216,21 +195,7 @@ namespace UmbracoExamine
return base.GetLuceneDirectory();
- }
-
- protected override IndexWriter CreateIndexWriter()
- {
- //if temp local storage is configured use that, otherwise return the default
- if (UseTempStorage)
- {
- var directory = GetLuceneDirectory();
- return new IndexWriter(GetLuceneDirectory(), IndexingAnalyzer,
- DeletePolicyTracker.Current.GetPolicy(directory),
- IndexWriter.MaxFieldLength.UNLIMITED);
- }
-
- return base.CreateIndexWriter();
- }
+ }
/////
///// Override to check if we can actually initialize.
@@ -306,18 +271,14 @@ namespace UmbracoExamine
///
protected bool CanInitialize()
{
- //check the DisableInitializationCheck and ensure that it is not set to true
- if (!DisableInitializationCheck.HasValue || !DisableInitializationCheck.Value)
+ //We need to check if we actually can initialize, if not then don't continue
+ if (ApplicationContext.Current == null
+ || !ApplicationContext.Current.IsConfigured
+ || !ApplicationContext.Current.DatabaseContext.IsDatabaseConfigured)
{
- //We need to check if we actually can initialize, if not then don't continue
- if (ApplicationContext.Current == null
- || !ApplicationContext.Current.IsConfigured
- || !ApplicationContext.Current.DatabaseContext.IsDatabaseConfigured)
- {
- return false;
- }
+ return false;
}
-
+
return true;
}
diff --git a/src/UmbracoExamine/DeletePolicyTracker.cs b/src/UmbracoExamine/DeletePolicyTracker.cs
index 3edcd12a24..1697a797c1 100644
--- a/src/UmbracoExamine/DeletePolicyTracker.cs
+++ b/src/UmbracoExamine/DeletePolicyTracker.cs
@@ -16,7 +16,7 @@ namespace UmbracoExamine
public IndexDeletionPolicy GetPolicy(Lucene.Net.Store.Directory directory)
{
- var resolved = _directories.GetOrAdd(directory.GetLockID(), s => new SnapshotDeletionPolicy(new KeepOnlyLastCommitDeletionPolicy()));
+ var resolved = _directories.GetOrAdd(directory.GetLockId(), s => new SnapshotDeletionPolicy(new KeepOnlyLastCommitDeletionPolicy()));
return resolved;
}
}
diff --git a/src/UmbracoExamine/LocalStorage/LocalTempStorageDirectory.cs b/src/UmbracoExamine/LocalStorage/LocalTempStorageDirectory.cs
index b1dce7ef2d..e902c03e9e 100644
--- a/src/UmbracoExamine/LocalStorage/LocalTempStorageDirectory.cs
+++ b/src/UmbracoExamine/LocalStorage/LocalTempStorageDirectory.cs
@@ -34,13 +34,7 @@ namespace UmbracoExamine.LocalStorage
/// If initialization fails, it will be disabled and then this will just wrap the 'real directory'
///
internal bool Enabled { get; set; }
-
- [Obsolete("this is deprecated")]
- public override string[] List()
- {
- return _realDirectory.List();
- }
-
+
public override string[] ListAll()
{
//always from the real dir
@@ -85,18 +79,7 @@ namespace UmbracoExamine.LocalStorage
_tempStorageDir.DeleteFile(name);
}
}
-
- [Obsolete("This is deprecated")]
- public override void RenameFile(string @from, string to)
- {
- _realDirectory.RenameFile(@from, to);
-
- //perform on both dirs
- if (Enabled)
- {
- _tempStorageDir.RenameFile(@from, to);
- }
- }
+
/// Returns the length of a file in the directory.
public override long FileLength(string name)
@@ -160,16 +143,7 @@ namespace UmbracoExamine.LocalStorage
_realDirectory.Sync(name);
_tempStorageDir.Sync(name);
base.Sync(name);
- }
-
- public override void Close()
- {
- if (Enabled)
- {
- _tempStorageDir.Close();
- }
- _realDirectory.Close();
- }
+ }
public override Lock MakeLock(string name)
{
@@ -185,15 +159,19 @@ namespace UmbracoExamine.LocalStorage
/// "scopes" to the right index.
///
///
- public override string GetLockID()
+ public override string GetLockId()
{
- return string.Concat(_realDirectory.GetLockID(), _tempStorageDir.GetLockID());
+ return string.Concat(_realDirectory.GetLockId(), _tempStorageDir.GetLockId());
}
-
- public override LockFactory GetLockFactory()
+
+ public override LockFactory LockFactory
{
- return _lockFactory;
- //return _realDirectory.GetLockFactory();
+ get
+ {
+ return _lockFactory;
+ //return _realDirectory.GetLockFactory();
+ }
+
}
public override void ClearLock(string name)
@@ -208,20 +186,21 @@ namespace UmbracoExamine.LocalStorage
//}
}
+ protected override void Dispose(bool disposing)
+ {
+ if (Enabled)
+ {
+ _tempStorageDir.Dispose();
+ }
+ _realDirectory.Dispose();
+ }
+
public override void SetLockFactory(LockFactory lf)
{
_lockFactory = lf;
//_realDirectory.SetLockFactory(lf);
}
-
- public override void Dispose()
- {
- if (Enabled)
- {
- _tempStorageDir.Dispose();
- }
- _realDirectory.Dispose();
- }
+
}
diff --git a/src/UmbracoExamine/LocalStorage/LocalTempStorageIndexer.cs b/src/UmbracoExamine/LocalStorage/LocalTempStorageIndexer.cs
index f4642eb0cd..0adc880f70 100644
--- a/src/UmbracoExamine/LocalStorage/LocalTempStorageIndexer.cs
+++ b/src/UmbracoExamine/LocalStorage/LocalTempStorageIndexer.cs
@@ -68,6 +68,8 @@ namespace UmbracoExamine.LocalStorage
if (tempPath == null) throw new InvalidOperationException("Could not resolve a temp location from the " + localStorageDir.GetType() + " specified");
TempPath = tempPath.FullName;
+ throw new NotSupportedException("Fix the local storage stuff!");
+
switch (localStorageType)
{
case LocalStorageType.Sync:
@@ -126,13 +128,13 @@ namespace UmbracoExamine.LocalStorage
}
break;
- case LocalStorageType.LocalOnly:
- if (Directory.Exists(TempPath) == false)
- {
- Directory.CreateDirectory(TempPath);
- }
- LuceneDirectory = DirectoryTracker.Current.GetDirectory(new DirectoryInfo(TempPath));
- break;
+ //case LocalStorageType.LocalOnly:
+ // if (Directory.Exists(TempPath) == false)
+ // {
+ // Directory.CreateDirectory(TempPath);
+ // }
+ // LuceneDirectory = DirectoryTracker.Current.GetDirectory(new DirectoryInfo(TempPath));
+ // break;
default:
throw new ArgumentOutOfRangeException("localStorageType");
}
@@ -324,10 +326,10 @@ namespace UmbracoExamine.LocalStorage
var basePath = IOHelper.MapPath(configuredPath);
var commit = Snapshotter.Snapshot();
- var allSnapshotFiles = commit.GetFileNames()
+ var allSnapshotFiles = commit.FileNames
.Concat(new[]
{
- commit.GetSegmentsFileName(),
+ commit.SegmentsFileName,
//we need to manually include the segments.gen file
"segments.gen"
})
diff --git a/src/UmbracoExamine/LocalStorage/MultiIndexLockFactory.cs b/src/UmbracoExamine/LocalStorage/MultiIndexLockFactory.cs
index 8d08041021..55bb986ce9 100644
--- a/src/UmbracoExamine/LocalStorage/MultiIndexLockFactory.cs
+++ b/src/UmbracoExamine/LocalStorage/MultiIndexLockFactory.cs
@@ -21,13 +21,13 @@ namespace UmbracoExamine.LocalStorage
public override Lock MakeLock(string lockName)
{
- return new MultiIndexLock(_master.GetLockFactory().MakeLock(lockName), _child.GetLockFactory().MakeLock(lockName));
+ return new MultiIndexLock(_master.LockFactory.MakeLock(lockName), _child.LockFactory.MakeLock(lockName));
}
public override void ClearLock(string lockName)
{
- _master.GetLockFactory().ClearLock(lockName);
- _child.GetLockFactory().ClearLock(lockName);
+ _master.LockFactory.ClearLock(lockName);
+ _child.LockFactory.ClearLock(lockName);
}
}
}
\ No newline at end of file
diff --git a/src/UmbracoExamine/LocalStorage/MultiIndexOutput.cs b/src/UmbracoExamine/LocalStorage/MultiIndexOutput.cs
index fed13643b8..a43a561c5d 100644
--- a/src/UmbracoExamine/LocalStorage/MultiIndexOutput.cs
+++ b/src/UmbracoExamine/LocalStorage/MultiIndexOutput.cs
@@ -41,18 +41,22 @@ namespace UmbracoExamine.LocalStorage
}
}
- public override void Close()
+ protected override void Dispose(bool isDisposing)
{
foreach (var output in _outputs)
{
- output.Close();
+ output.Dispose();
}
}
- public override long GetFilePointer()
+ public override long FilePointer
{
- //return the first
- return _outputs.First().GetFilePointer();
+ get
+ {
+ //return the first
+ return _outputs[0].FilePointer;
+ }
+
}
public override void Seek(long pos)
@@ -63,10 +67,14 @@ namespace UmbracoExamine.LocalStorage
}
}
- public override long Length()
+ public override long Length
{
- //return the first
- return _outputs.First().GetFilePointer();
+ get
+ {
+ //return the first
+ return _outputs[0].FilePointer;
+ }
+
}
}
}
\ No newline at end of file
diff --git a/src/UmbracoExamine/UmbracoContentIndexer.cs b/src/UmbracoExamine/UmbracoContentIndexer.cs
index 86f8487a56..276c41260a 100644
--- a/src/UmbracoExamine/UmbracoContentIndexer.cs
+++ b/src/UmbracoExamine/UmbracoContentIndexer.cs
@@ -12,8 +12,11 @@ using Umbraco.Core.Strings;
using UmbracoExamine.DataServices;
using Examine.LuceneEngine;
using Examine.LuceneEngine.Config;
+using Examine.LuceneEngine.Faceting;
+using Examine.LuceneEngine.Indexing;
using UmbracoExamine.Config;
using Lucene.Net.Analysis;
+using Lucene.Net.Store;
using IContentService = Umbraco.Core.Services.IContentService;
using IMediaService = Umbraco.Core.Services.IMediaService;
@@ -46,29 +49,18 @@ namespace UmbracoExamine
_urlSegmentProviders = UrlSegmentProviderResolver.Current.Providers;
}
-
- ///
- /// Constructor to allow for creating an indexer at runtime
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- public UmbracoContentIndexer(IIndexCriteria indexerData, Lucene.Net.Store.Directory luceneDirectory, IDataService dataService,
+ public UmbracoContentIndexer(
+ IEnumerable fieldDefinitions,
+ Directory luceneDirectory,
+ Analyzer defaultAnalyzer,
IContentService contentService,
- IMediaService mediaService,
- IDataTypeService dataTypeService,
- IUserService userService,
- IEnumerable urlSegmentProviders,
- Analyzer analyzer,
- bool async)
- : base(indexerData, luceneDirectory, dataService, analyzer, async)
+ IMediaService mediaService,
+ IDataTypeService dataTypeService,
+ IUserService userService,
+ IEnumerable urlSegmentProviders,
+ FacetConfiguration facetConfiguration = null,
+ IDictionary> indexValueTypes = null)
+ : base(fieldDefinitions, luceneDirectory, defaultAnalyzer, facetConfiguration, indexValueTypes)
{
ContentService = contentService;
MediaService = mediaService;
@@ -77,11 +69,41 @@ namespace UmbracoExamine
_urlSegmentProviders = urlSegmentProviders;
}
+ /////
+ ///// Constructor to allow for creating an indexer at runtime
+ /////
+ /////
+ /////
+ /////
+ /////
+ /////
+ /////
+ /////
+ /////
+ /////
+ /////
+ //public UmbracoContentIndexer(IIndexCriteria indexerData, Lucene.Net.Store.Directory luceneDirectory, IDataService dataService,
+ // IContentService contentService,
+ // IMediaService mediaService,
+ // IDataTypeService dataTypeService,
+ // IUserService userService,
+ // IEnumerable urlSegmentProviders,
+ // Analyzer analyzer,
+ // bool async)
+ // : base(indexerData, luceneDirectory, dataService, analyzer, async)
+ //{
+ // ContentService = contentService;
+ // MediaService = mediaService;
+ // DataTypeService = dataTypeService;
+ // UserService = userService;
+ // _urlSegmentProviders = urlSegmentProviders;
+ //}
+
#endregion
#region Constants & Fields
-
+
///
/// Used to store the path of a content object
@@ -279,27 +301,29 @@ namespace UmbracoExamine
/// ID of the node to delete
public override void DeleteFromIndex(string nodeId)
{
- //find all descendants based on path
- var descendantPath = string.Format(@"\-1\,*{0}\,*", nodeId);
- var rawQuery = string.Format("{0}:{1}", IndexPathFieldName, descendantPath);
- var c = InternalSearcher.CreateSearchCriteria();
- var filtered = c.RawQuery(rawQuery);
- var results = InternalSearcher.Search(filtered);
+ throw new NotImplementedException("Fix DeleteFromIndex!");
- DataService.LogService.AddVerboseLog(int.Parse(nodeId), string.Format("DeleteFromIndex with query: {0} (found {1} results)", rawQuery, results.Count()));
+ ////find all descendants based on path
+ //var descendantPath = string.Format(@"\-1\,*{0}\,*", nodeId);
+ //var rawQuery = string.Format("{0}:{1}", IndexPathFieldName, descendantPath);
+ //var c = InternalSearcher.CreateSearchCriteria();
+ //var filtered = c.RawQuery(rawQuery);
+ //var results = InternalSearcher.Search(filtered);
- //need to create a delete queue item for each one found
- foreach (var r in results)
- {
- EnqueueIndexOperation(new IndexOperation()
- {
- Operation = IndexOperationType.Delete,
- Item = new IndexItem(null, "", r.Id.ToString())
- });
- //SaveDeleteIndexQueueItem(new KeyValuePair(IndexNodeIdFieldName, r.Id.ToString()));
- }
+ //DataService.LogService.AddVerboseLog(int.Parse(nodeId), string.Format("DeleteFromIndex with query: {0} (found {1} results)", rawQuery, results.Count()));
- base.DeleteFromIndex(nodeId);
+ ////need to create a delete queue item for each one found
+ //foreach (var r in results)
+ //{
+ // EnqueueIndexOperation(new IndexOperation()
+ // {
+ // Operation = IndexOperationType.Delete,
+ // Item = new IndexItem(null, "", r.Id.ToString())
+ // });
+ // //SaveDeleteIndexQueueItem(new KeyValuePair(IndexNodeIdFieldName, r.Id.ToString()));
+ //}
+
+ //base.DeleteFromIndex(nodeId);
}
#endregion
diff --git a/src/UmbracoExamine/UmbracoExamine.csproj b/src/UmbracoExamine/UmbracoExamine.csproj
index 7f137d11d0..10ab78696d 100644
--- a/src/UmbracoExamine/UmbracoExamine.csproj
+++ b/src/UmbracoExamine/UmbracoExamine.csproj
@@ -82,17 +82,57 @@
..\Solution Items\TheFARM-Public.snk
-
- ..\packages\Examine.0.1.68.0\lib\Examine.dll
+
+ ..\packages\Examine.2.0.0-beta8\lib\net45\Examine.dll
True
False
..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll
-
- False
- ..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll
+
+ ..\packages\Lucene.Net.3.0.3\lib\NET40\Lucene.Net.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Analyzers.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Core.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.FastVectorHighlighter.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Highlighter.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Memory.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Queries.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Regex.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.SimpleFacetedSearch.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Snowball.dll
+ True
+
+
+ ..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.SpellChecker.dll
+ True
diff --git a/src/UmbracoExamine/UmbracoExamineSearcher.cs b/src/UmbracoExamine/UmbracoExamineSearcher.cs
index acbfefb180..f082a80327 100644
--- a/src/UmbracoExamine/UmbracoExamineSearcher.cs
+++ b/src/UmbracoExamine/UmbracoExamineSearcher.cs
@@ -133,12 +133,7 @@ namespace UmbracoExamine
}
#endregion
-
- ///
- /// Used for unit tests
- ///
- internal static bool? DisableInitializationCheck = null;
-
+
///
/// Returns true if the Umbraco application is in a state that we can initialize the examine indexes
///
@@ -146,16 +141,12 @@ namespace UmbracoExamine
protected bool CanInitialize()
{
- //check the DisableInitializationCheck and ensure that it is not set to true
- if (!DisableInitializationCheck.HasValue || !DisableInitializationCheck.Value)
+ //We need to check if we actually can initialize, if not then don't continue
+ if (ApplicationContext.Current == null
+ || !ApplicationContext.Current.IsConfigured
+ || !ApplicationContext.Current.DatabaseContext.IsDatabaseConfigured)
{
- //We need to check if we actually can initialize, if not then don't continue
- if (ApplicationContext.Current == null
- || !ApplicationContext.Current.IsConfigured
- || !ApplicationContext.Current.DatabaseContext.IsDatabaseConfigured)
- {
- return false;
- }
+ return false;
}
return true;
}
@@ -168,8 +159,10 @@ namespace UmbracoExamine
///
public override ISearchCriteria CreateSearchCriteria(string type, BooleanOperation defaultOperation)
{
- var criteria = base.CreateSearchCriteria(type, defaultOperation) as LuceneSearchCriteria;
- criteria.NodeTypeAliasField = UmbracoContentIndexer.NodeTypeAliasFieldName;
+ throw new NotImplementedException("Fix strongly typed CreateSearchCriteria");
+
+ var criteria = base.CreateSearchCriteria(type, defaultOperation) as LuceneSearchCriteria;
+ //criteria.NodeTypeAliasField = UmbracoContentIndexer.NodeTypeAliasFieldName;
return criteria;
}
@@ -185,56 +178,49 @@ namespace UmbracoExamine
.Where(x => x != UmbracoContentIndexer.NodeTypeAliasFieldName)
.ToArray();
}
-
- protected override IndexReader OpenNewReader()
- {
- var directory = GetLuceneDirectory();
- return IndexReader.Open(
- directory,
- //DeletePolicyTracker.Current.GetPolicy(directory),
- true);
- }
-
+
protected override Lucene.Net.Store.Directory GetLuceneDirectory()
{
- //local temp storage is not enabled, just return the default
- if (_localTempPath == null) return base.GetLuceneDirectory();
+ throw new NotImplementedException("Fix local storage stuff");
- //local temp storage is enabled, configure the local directory instance
- if (_localTempDirectory == null)
- {
- lock (Locker)
- {
- if (_localTempDirectory == null)
- {
- switch (_localStorageType)
- {
- case LocalStorageType.Sync:
- var fsDir = base.GetLuceneDirectory() as FSDirectory;
- if (fsDir != null)
- {
- _localTempDirectory = LocalTempStorageDirectoryTracker.Current.GetDirectory(
- new DirectoryInfo(_localTempPath),
- fsDir);
- }
- else
- {
- return base.GetLuceneDirectory();
- }
- break;
- case LocalStorageType.LocalOnly:
- _localTempDirectory = DirectoryTracker.Current.GetDirectory(new DirectoryInfo(_localTempPath));
- break;
- default:
- throw new ArgumentOutOfRangeException();
- }
+ ////local temp storage is not enabled, just return the default
+ //if (_localTempPath == null) return base.GetLuceneDirectory();
+
+ ////local temp storage is enabled, configure the local directory instance
+ //if (_localTempDirectory == null)
+ //{
+ // lock (Locker)
+ // {
+ // if (_localTempDirectory == null)
+ // {
+ // switch (_localStorageType)
+ // {
+ // case LocalStorageType.Sync:
+ // var fsDir = base.GetLuceneDirectory() as FSDirectory;
+ // if (fsDir != null)
+ // {
+ // _localTempDirectory = LocalTempStorageDirectoryTracker.Current.GetDirectory(
+ // new DirectoryInfo(_localTempPath),
+ // fsDir);
+ // }
+ // else
+ // {
+ // return base.GetLuceneDirectory();
+ // }
+ // break;
+ // case LocalStorageType.LocalOnly:
+ // _localTempDirectory = DirectoryTracker.Current.GetDirectory(new DirectoryInfo(_localTempPath));
+ // break;
+ // default:
+ // throw new ArgumentOutOfRangeException();
+ // }
- }
- }
- }
+ // }
+ // }
+ //}
- return _localTempDirectory;
+ //return _localTempDirectory;
}
}
}
diff --git a/src/UmbracoExamine/XsltExtensions.cs b/src/UmbracoExamine/XsltExtensions.cs
index abfe5cc555..019fa91975 100644
--- a/src/UmbracoExamine/XsltExtensions.cs
+++ b/src/UmbracoExamine/XsltExtensions.cs
@@ -5,6 +5,7 @@ using System.Security;
using System.Xml.Linq;
using System.Xml.XPath;
using Examine;
+using Examine.LuceneEngine;
using Examine.LuceneEngine.Providers;
using Examine.LuceneEngine.SearchCriteria;
using Examine.SearchCriteria;
@@ -32,7 +33,7 @@ namespace UmbracoExamine
///
///
///
- internal static XPathNodeIterator Search(string searchText, bool useWildcards, BaseSearchProvider provider, string indexType)
+ internal static XPathNodeIterator Search(string searchText, bool useWildcards, LuceneSearcher provider, string indexType)
{
if (provider == null) throw new ArgumentNullException("provider");
@@ -50,7 +51,7 @@ namespace UmbracoExamine
///
public static XPathNodeIterator Search(string searchText, bool useWildcards, string providerName, string indexType)
{
- var provider = ExamineManager.Instance.SearchProviderCollection[providerName];
+ var provider = (LuceneSearcher)ExamineManager.Instance.SearchProviderCollection[providerName];
return Search(searchText, useWildcards, provider, indexType);
}
@@ -193,7 +194,7 @@ namespace UmbracoExamine
///
/// The results.
///
- private static XPathNodeIterator GetResultsAsXml(ISearchResults results)
+ private static XPathNodeIterator GetResultsAsXml(ILuceneSearchResults results)
{
// create the XDocument
XDocument doc = new XDocument();
diff --git a/src/UmbracoExamine/app.config b/src/UmbracoExamine/app.config
index 65f505d522..069bb69de3 100644
--- a/src/UmbracoExamine/app.config
+++ b/src/UmbracoExamine/app.config
@@ -30,6 +30,10 @@
+
+
+
+
diff --git a/src/UmbracoExamine/packages.config b/src/UmbracoExamine/packages.config
index 722e13f2d5..2d46a0b8b9 100644
--- a/src/UmbracoExamine/packages.config
+++ b/src/UmbracoExamine/packages.config
@@ -1,6 +1,7 @@
-
-
+
+
+
\ No newline at end of file