Last active
May 8, 2020 22:03
-
-
Save lars-erik/c12de6ca2f37c41a481f95ffc9054d6c to your computer and use it in GitHub Desktop.
Umbraco path indexed properly. The only useful/interesting code here is really at the end of line 83. :)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.IO; | |
using Examine; | |
using Examine.LuceneEngine; | |
using Examine.LuceneEngine.Indexing; | |
using Lucene.Net.Analysis; | |
using Lucene.Net.Util; | |
using Umbraco.Core.Composing; | |
using Constants = Umbraco.Core.Constants; | |
// ReSharper disable once CheckNamespace | |
namespace MySite.Web.AppStart | |
{ | |
public class IndexComposer : ComponentComposer<IndexComponent> | |
{ | |
} | |
public class IndexComponent : IComponent | |
{ | |
private readonly IExamineManager examineManager; | |
public IndexComponent(IExamineManager examineManager) | |
{ | |
this.examineManager = examineManager; | |
} | |
public void Initialize() | |
{ | |
if (!examineManager.TryGetIndex(Constants.UmbracoIndexes.ExternalIndexName, out var index)) | |
{ | |
return; | |
} | |
var coll = ((Examine.LuceneEngine.Providers.LuceneIndex) index).FieldValueTypeCollection; | |
index.FieldDefinitionCollection.AddOrUpdate(new FieldDefinition("path", "csv")); | |
coll.ValueTypeFactories.AddOrUpdate("csv", new DelegateFieldValueTypeFactory(s => new FullTextType(s, new WhitespaceAndCommaAnalyzer()))); | |
//index.FieldDefinitionCollection. | |
} | |
public void Terminate() | |
{ | |
} | |
} | |
public class WhitespaceAndCommaAnalyzer : Analyzer | |
{ | |
public override TokenStream TokenStream(string fieldName, TextReader reader) | |
{ | |
return (TokenStream)new WhitespaceAndCommaTokenizer(reader); | |
} | |
public override TokenStream ReusableTokenStream(string fieldName, TextReader reader) | |
{ | |
Tokenizer tokenizer = (Tokenizer)this.PreviousTokenStream; | |
if (tokenizer == null) | |
{ | |
tokenizer = (Tokenizer)new WhitespaceAndCommaTokenizer(reader); | |
this.PreviousTokenStream = (object)tokenizer; | |
} | |
else | |
tokenizer.Reset(reader); | |
return (TokenStream)tokenizer; | |
} | |
} | |
public class WhitespaceAndCommaTokenizer : WhitespaceTokenizer | |
{ | |
public WhitespaceAndCommaTokenizer(TextReader @in) : base(@in) | |
{ | |
} | |
public WhitespaceAndCommaTokenizer(AttributeSource source, TextReader @in) : base(source, @in) | |
{ | |
} | |
public WhitespaceAndCommaTokenizer(AttributeFactory factory, TextReader @in) : base(factory, @in) | |
{ | |
} | |
protected override bool IsTokenChar(char c) | |
{ | |
return base.IsTokenChar(c) && !','.Equals(c); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment