WIP - starts porting umbraco over to lucene 3 and Examine v2

This commit is contained in:
Shannon
2016-03-30 15:12:30 +02:00
parent 4defc881d4
commit 429d7e2aff
26 changed files with 504 additions and 324 deletions
+13
View File
@@ -200,6 +200,19 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Lucene.Net" publicKeyToken="85089178b9ac3181" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.3.0" newVersion="3.0.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="HtmlAgilityPack" publicKeyToken="bd319b19eaf3b43a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.4.9.0" newVersion="1.4.9.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
@@ -148,7 +148,7 @@ namespace Umbraco.Tests.Cache.PublishedCache
var result = new SearchResult()
{
Id = 1234,
LongId = 1234,
Score = 1
};
result.Fields.Add("__IndexType", "media");
+45 -5
View File
@@ -55,8 +55,8 @@
<HintPath>..\packages\AutoMapper.4.2.1\lib\net45\AutoMapper.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Examine, Version=0.1.68.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Examine.0.1.68.0\lib\Examine.dll</HintPath>
<Reference Include="Examine, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Examine.2.0.0-beta8\lib\net45\Examine.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
@@ -71,9 +71,49 @@
<HintPath>..\packages\log4net.2.0.5\lib\net45-full\log4net.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net, Version=2.9.4.1, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll</HintPath>
<Reference Include="Lucene.Net, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.3.0.3\lib\NET40\Lucene.Net.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Analyzers, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Analyzers.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Core, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Core.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.FastVectorHighlighter, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.FastVectorHighlighter.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Highlighter, Version=2.3.2.1, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Highlighter.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Memory, Version=1.0.0.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Memory.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Queries, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Queries.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Regex, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Regex.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.SimpleFacetedSearch, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.SimpleFacetedSearch.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Snowball, Version=2.0.0.1, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Snowball.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.SpellChecker, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.SpellChecker.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Owin, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Owin.3.0.1\lib\net45\Microsoft.Owin.dll</HintPath>
@@ -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)
@@ -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;
+33 -25
View File
@@ -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);
}
+3 -2
View File
@@ -2,10 +2,11 @@
<packages>
<package id="AspNetWebApi.SelfHost" version="4.0.20710.0" targetFramework="net45" />
<package id="AutoMapper" version="4.2.1" targetFramework="net461" />
<package id="Examine" version="0.1.68.0" targetFramework="net45" />
<package id="Examine" version="2.0.0-beta8" targetFramework="net461" />
<package id="LightInject" version="4.0.8" targetFramework="net461" />
<package id="log4net" version="2.0.5" targetFramework="net461" />
<package id="Lucene.Net" version="2.9.4.1" targetFramework="net45" />
<package id="Lucene.Net" version="3.0.3" targetFramework="net461" />
<package id="Lucene.Net.Contrib" version="3.0.3" targetFramework="net461" />
<package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net45" />
+45 -5
View File
@@ -120,8 +120,8 @@
<HintPath>..\packages\ClientDependency-Mvc5.1.8.0.0\lib\net45\ClientDependency.Core.Mvc.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Examine, Version=0.1.68.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Examine.0.1.68.0\lib\Examine.dll</HintPath>
<Reference Include="Examine, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Examine.2.0.0-beta8\lib\net45\Examine.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
@@ -140,9 +140,49 @@
<HintPath>..\packages\log4net.2.0.5\lib\net45-full\log4net.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net, Version=2.9.4.1, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll</HintPath>
<Reference Include="Lucene.Net, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.3.0.3\lib\NET40\Lucene.Net.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Analyzers, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Analyzers.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Core, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Core.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.FastVectorHighlighter, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.FastVectorHighlighter.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Highlighter, Version=2.3.2.1, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Highlighter.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Memory, Version=1.0.0.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Memory.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Queries, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Queries.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Regex, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Regex.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.SimpleFacetedSearch, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.SimpleFacetedSearch.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Snowball, Version=2.0.0.1, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Snowball.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.SpellChecker, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.SpellChecker.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.AspNet.Identity.Core">
<HintPath>..\packages\Microsoft.AspNet.Identity.Core.2.2.1\lib\net45\Microsoft.AspNet.Identity.Core.dll</HintPath>
+3 -2
View File
@@ -3,11 +3,12 @@
<package id="AutoMapper" version="4.2.1" targetFramework="net461" />
<package id="ClientDependency" version="1.8.4" targetFramework="net45" />
<package id="ClientDependency-Mvc5" version="1.8.0.0" targetFramework="net45" />
<package id="Examine" version="0.1.68.0" targetFramework="net45" />
<package id="Examine" version="2.0.0-beta8" targetFramework="net461" />
<package id="ImageProcessor" version="2.3.3.0" targetFramework="net45" />
<package id="ImageProcessor.Web" version="4.5.3.0" targetFramework="net45" />
<package id="log4net" version="2.0.5" targetFramework="net461" />
<package id="Lucene.Net" version="2.9.4.1" targetFramework="net45" />
<package id="Lucene.Net" version="3.0.3" targetFramework="net461" />
<package id="Lucene.Net.Contrib" version="3.0.3" targetFramework="net461" />
<package id="Microsoft.AspNet.Identity.Core" version="2.2.1" targetFramework="net45" />
<package id="Microsoft.AspNet.Identity.Owin" version="2.2.1" targetFramework="net45" />
<package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45" />
+4 -1
View File
@@ -409,7 +409,10 @@
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Lucene.Net" publicKeyToken="85089178b9ac3181" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.3.0" newVersion="3.0.3.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
@@ -21,7 +21,10 @@ namespace Umbraco.Web.Search
/// <returns></returns>
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
/// <returns></returns>
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
/// <returns></returns>
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
/// <returns></returns>
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;
}
}
}
+45 -6
View File
@@ -113,9 +113,8 @@
<Reference Include="dotless.Core">
<HintPath>..\packages\dotless.1.4.1.0\lib\dotless.Core.dll</HintPath>
</Reference>
<Reference Include="Examine, Version=0.1.68.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Examine.0.1.68.0\lib\Examine.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
<Reference Include="Examine, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Examine.2.0.0-beta8\lib\net45\Examine.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="HtmlAgilityPack, Version=1.4.9.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
@@ -146,9 +145,49 @@
<HintPath>..\packages\log4net.2.0.5\lib\net45-full\log4net.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net, Version=2.9.4.1, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll</HintPath>
<Reference Include="Lucene.Net, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.3.0.3\lib\NET40\Lucene.Net.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Analyzers, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Analyzers.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Core, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Core.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.FastVectorHighlighter, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.FastVectorHighlighter.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Highlighter, Version=2.3.2.1, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Highlighter.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Memory, Version=1.0.0.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Memory.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Queries, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Queries.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Regex, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Regex.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.SimpleFacetedSearch, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.SimpleFacetedSearch.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Snowball, Version=2.0.0.1, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Snowball.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.SpellChecker, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.SpellChecker.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="MarkdownSharp, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Markdown.1.14.4\lib\net45\MarkdownSharp.dll</HintPath>
+8
View File
@@ -71,6 +71,14 @@
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Lucene.Net" publicKeyToken="85089178b9ac3181" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.3.0" newVersion="3.0.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="HtmlAgilityPack" publicKeyToken="bd319b19eaf3b43a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.4.9.0" newVersion="1.4.9.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /></startup></configuration>
+3 -2
View File
@@ -3,14 +3,15 @@
<package id="AutoMapper" version="4.2.1" targetFramework="net461" />
<package id="ClientDependency" version="1.8.4" targetFramework="net45" />
<package id="dotless" version="1.4.1.0" targetFramework="net45" />
<package id="Examine" version="0.1.68.0" targetFramework="net45" />
<package id="Examine" version="2.0.0-beta8" targetFramework="net461" />
<package id="HtmlAgilityPack" version="1.4.9" targetFramework="net45" />
<package id="LightInject" version="4.0.8" targetFramework="net461" />
<package id="LightInject.Mvc" version="1.0.0.4" targetFramework="net45" />
<package id="LightInject.Web" version="1.0.0.7" targetFramework="net461" />
<package id="LightInject.WebApi" version="1.0.0.4" targetFramework="net45" />
<package id="log4net" version="2.0.5" targetFramework="net461" />
<package id="Lucene.Net" version="2.9.4.1" targetFramework="net45" />
<package id="Lucene.Net" version="3.0.3" targetFramework="net461" />
<package id="Lucene.Net.Contrib" version="3.0.3" targetFramework="net461" />
<package id="Markdown" version="1.14.4" targetFramework="net45" />
<package id="Microsoft.AspNet.Identity.Core" version="2.2.1" targetFramework="net45" />
<package id="Microsoft.AspNet.Identity.Owin" version="2.2.1" targetFramework="net45" />
+35 -74
View File
@@ -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
{
}
/// <summary>
/// Constructor to allow for creating an indexer at runtime
/// </summary>
/// <param name="indexerData"></param>
/// <param name="indexPath"></param>
/// <param name="dataService"></param>
/// <param name="analyzer"></param>
protected BaseUmbracoIndexer(IIndexCriteria indexerData, DirectoryInfo indexPath, IDataService dataService, Analyzer analyzer, bool async)
: base(indexerData, indexPath, analyzer, async)
protected BaseUmbracoIndexer(IEnumerable<FieldDefinition> fieldDefinitions, Directory luceneDirectory, Analyzer defaultAnalyzer, FacetConfiguration facetConfiguration = null, IDictionary<string, Func<string, IIndexValueType>> 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;
}
// /// <summary>
// /// Constructor to allow for creating an indexer at runtime
// /// </summary>
// /// <param name="indexerData"></param>
// /// <param name="indexPath"></param>
// /// <param name="dataService"></param>
// /// <param name="analyzer"></param>
// [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
/// <summary>
/// Used for unit tests
/// </summary>
internal static bool? DisableInitializationCheck = null;
private readonly LocalTempStorageIndexer _localTempStorageIndexer = new LocalTempStorageIndexer();
private BaseLuceneSearcher _internalTempStorageSearcher = null;
@@ -89,6 +95,7 @@ namespace UmbracoExamine
/// </summary>
public bool SupportUnpublishedContent { get; protected set; }
//TODO: Probably get rid of this right ?
/// <summary>
/// The data service used for retreiving and submitting data to the cms
/// </summary>
@@ -176,35 +183,7 @@ namespace UmbracoExamine
}
#endregion
/// <summary>
/// Used to aquire the internal searcher
/// </summary>
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();
}
}
///// <summary>
///// Override to check if we can actually initialize.
@@ -306,18 +271,14 @@ namespace UmbracoExamine
/// <returns></returns>
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;
}
+1 -1
View File
@@ -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;
}
}
@@ -34,13 +34,7 @@ namespace UmbracoExamine.LocalStorage
/// If initialization fails, it will be disabled and then this will just wrap the 'real directory'
/// </summary>
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);
}
}
/// <summary>Returns the length of a file in the directory. </summary>
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.
///
/// </summary>
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();
}
}
@@ -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"
})
@@ -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);
}
}
}
@@ -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;
}
}
}
}
+65 -41
View File
@@ -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;
}
/// <summary>
/// Constructor to allow for creating an indexer at runtime
/// </summary>
/// <param name="indexerData"></param>
/// <param name="luceneDirectory"></param>
/// <param name="dataService"></param>
/// <param name="contentService"></param>
/// <param name="mediaService"></param>
/// <param name="dataTypeService"></param>
/// <param name="userService"></param>
/// <param name="urlSegmentProviders"></param>
/// <param name="analyzer"></param>
/// <param name="async"></param>
public UmbracoContentIndexer(IIndexCriteria indexerData, Lucene.Net.Store.Directory luceneDirectory, IDataService dataService,
public UmbracoContentIndexer(
IEnumerable<FieldDefinition> fieldDefinitions,
Directory luceneDirectory,
Analyzer defaultAnalyzer,
IContentService contentService,
IMediaService mediaService,
IDataTypeService dataTypeService,
IUserService userService,
IEnumerable<IUrlSegmentProvider> urlSegmentProviders,
Analyzer analyzer,
bool async)
: base(indexerData, luceneDirectory, dataService, analyzer, async)
IMediaService mediaService,
IDataTypeService dataTypeService,
IUserService userService,
IEnumerable<IUrlSegmentProvider> urlSegmentProviders,
FacetConfiguration facetConfiguration = null,
IDictionary<string, Func<string, IIndexValueType>> indexValueTypes = null)
: base(fieldDefinitions, luceneDirectory, defaultAnalyzer, facetConfiguration, indexValueTypes)
{
ContentService = contentService;
MediaService = mediaService;
@@ -77,11 +69,41 @@ namespace UmbracoExamine
_urlSegmentProviders = urlSegmentProviders;
}
///// <summary>
///// Constructor to allow for creating an indexer at runtime
///// </summary>
///// <param name="indexerData"></param>
///// <param name="luceneDirectory"></param>
///// <param name="dataService"></param>
///// <param name="contentService"></param>
///// <param name="mediaService"></param>
///// <param name="dataTypeService"></param>
///// <param name="userService"></param>
///// <param name="urlSegmentProviders"></param>
///// <param name="analyzer"></param>
///// <param name="async"></param>
//public UmbracoContentIndexer(IIndexCriteria indexerData, Lucene.Net.Store.Directory luceneDirectory, IDataService dataService,
// IContentService contentService,
// IMediaService mediaService,
// IDataTypeService dataTypeService,
// IUserService userService,
// IEnumerable<IUrlSegmentProvider> 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
/// <summary>
/// Used to store the path of a content object
@@ -279,27 +301,29 @@ namespace UmbracoExamine
/// <param name="nodeId">ID of the node to delete</param>
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<string, string>(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<string, string>(IndexNodeIdFieldName, r.Id.ToString()));
//}
//base.DeleteFromIndex(nodeId);
}
#endregion
+45 -5
View File
@@ -82,17 +82,57 @@
<AssemblyOriginatorKeyFile>..\Solution Items\TheFARM-Public.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
<ItemGroup>
<Reference Include="Examine, Version=0.1.68.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Examine.0.1.68.0\lib\Examine.dll</HintPath>
<Reference Include="Examine, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Examine.2.0.0-beta8\lib\net45\Examine.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath>
</Reference>
<Reference Include="Lucene.Net, Version=2.9.4.1, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Lucene.Net.2.9.4.1\lib\net40\Lucene.Net.dll</HintPath>
<Reference Include="Lucene.Net, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.3.0.3\lib\NET40\Lucene.Net.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Analyzers, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Analyzers.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Core, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Core.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.FastVectorHighlighter, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.FastVectorHighlighter.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Highlighter, Version=2.3.2.1, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Highlighter.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Memory, Version=1.0.0.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Memory.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Queries, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Queries.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Regex, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Regex.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.SimpleFacetedSearch, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.SimpleFacetedSearch.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.Snowball, Version=2.0.0.1, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.Snowball.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Lucene.Net.Contrib.SpellChecker, Version=3.0.3.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
<HintPath>..\packages\Lucene.Net.Contrib.3.0.3\lib\net40\Lucene.Net.Contrib.SpellChecker.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="System" />
+47 -61
View File
@@ -133,12 +133,7 @@ namespace UmbracoExamine
}
#endregion
/// <summary>
/// Used for unit tests
/// </summary>
internal static bool? DisableInitializationCheck = null;
/// <summary>
/// Returns true if the Umbraco application is in a state that we can initialize the examine indexes
/// </summary>
@@ -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
/// <returns></returns>
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;
}
}
}
+4 -3
View File
@@ -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
///<param name="provider"></param>
///<param name="indexType"></param>
///<returns></returns>
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
/// <returns></returns>
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
/// </summary>
/// <param name="results">The results.</param>
/// <returns></returns>
private static XPathNodeIterator GetResultsAsXml(ISearchResults results)
private static XPathNodeIterator GetResultsAsXml(ILuceneSearchResults results)
{
// create the XDocument
XDocument doc = new XDocument();
+4
View File
@@ -30,6 +30,10 @@
<assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="HtmlAgilityPack" publicKeyToken="bd319b19eaf3b43a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.4.9.0" newVersion="1.4.9.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /></startup></configuration>
+3 -2
View File
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Examine" version="0.1.68.0" targetFramework="net45" />
<package id="Lucene.Net" version="2.9.4.1" targetFramework="net45" />
<package id="Examine" version="2.0.0-beta8" targetFramework="net461" />
<package id="Lucene.Net" version="3.0.3" targetFramework="net461" />
<package id="Lucene.Net.Contrib" version="3.0.3" targetFramework="net461" />
<package id="SharpZipLib" version="0.86.0" targetFramework="net45" />
</packages>