Accent Insensitive Search in Sitefinity

Default Blog Top Image
by Stefani Tacheva Posted on May 26, 2014
The content you're reading is getting on in years.

This post is on the older side and its content may be out of date.
Be sure to visit our blogs homepage for our latest news, updates and information.

One way to implement an accent insensitive search is to replace the default analyzer used by Lucene in Sitefinity with one that replaces accented characters with the corresponding unaccented ones. Fortunately Lucene provides this functionality out of the box with the ASCIIFoldingFilter class. Below you could find an example of how to implement an analyzer that applies this filter.

To make Lucene use your custom analyzer in Sitefinity you need to register it in the ObjectFactory. This way it will be used both during indexing and during search. This would mean that the search index would store all characters with accents removed and during search all accents will also be removed.

Altogether you will need the following code in your Global.asax.cs:

using System;
using Telerik.Microsoft.Practices.Unity;
using Telerik.Sitefinity.Abstractions;
using Telerik.Sitefinity.Data;
using Telerik.Sitefinity.Utilities.Lucene.Net.Analysis;
using Telerik.Sitefinity.Utilities.Lucene.Net.Analysis.Standard;
   
namespace SitefinityWebApp
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            Bootstrapper.Initialized += this.Bootstrapper_Initialized;
        }
   
        private void Bootstrapper_Initialized(object sender, ExecutedEventArgs e)
        {
            if (e.CommandName != "Bootstrapped")
                return;
   
            ObjectFactory.Container.RegisterType<Analyzer, AccentInsensitiveAnalyzer>(
                new ContainerControlledLifetimeManager(),
                new InjectionConstructor(new InjectionParameter<string[]>(null)));
        }
    }
   
    public class AccentInsensitiveAnalyzer : StandardAnalyzer
    {
        public AccentInsensitiveAnalyzer(string[] stopWords)
            : base(stopWords)
        {
        }
   
        public override TokenStream TokenStream(string fieldName, System.IO.TextReader reader)
        {
            TokenStream stream = new StandardTokenizer(reader);
            stream = new StandardFilter(stream);
            stream = new ASCIIFoldingFilter(stream);
            return stream;
        }
    }
}

Furthermore, we have a feature request added in our Feedback portal for having this feature available out of the box with Sitefinity. You could review its description on the following URL and vote for its popularity:

http://feedback.telerik.com/Project/153/Feedback/Details/99130-to-be-able-to-perform-insensitive-accent-search-in-sitefinity

As a result:


Stefani Tacheva
View all posts from Stefani Tacheva on the Progress blog. Connect with us about all things application development and deployment, data integration and digital business.
More from the author

Related Products:

Sitefinity

Digital content and experience management suite of intelligent, ROI-driving tools for marketers and an extensible toolset for developers to create engaging, cross-platform digital experiences.

Get started
Prefooter Dots
Subscribe Icon

Latest Stories in Your Inbox

Subscribe to get all the news, info and tutorials you need to build better business apps and sites

Loading animation