Accent Insensitive Search in Sitefinity

Accent Insensitive Search in Sitefinity

May 26, 2014 0 Comments

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.

Comments
Comments are disabled in preview mode.
Topics
 
 
Latest Stories in
Your Inbox
Subscribe
More From Progress
New_Mobile_Dev_Ebook_Progress_Website_Thumbail
The New Mobile Development Landscape
Download Whitepaper
 
IDC Spotlight Sitefinity Thumbnail
Choosing the Right Digital Experience Platform to Improve Business Outcomes
Download Whitepaper
 
TheFastestWayToBuildMobileAppsArtboard-2
The Fastest Way to Build Mobile Apps With Cloud Data
Watch Webinar