Skip to content

Instantly share code, notes, and snippets.

@lars-erik
Last active May 8, 2020 22:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lars-erik/c12de6ca2f37c41a481f95ffc9054d6c to your computer and use it in GitHub Desktop.
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. :)
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