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 to get all the news, info and tutorials you need to build better business apps and sites

Sitefinity Training and Certification Now Available.

Let our experts teach you how to use Sitefinity's best-in-class features to deliver compelling digital experiences.

Learn More
More From Progress
New Digital Challenges, New Me: Meet Sitefinity DX 14.0
Read More
 
232x131_ResourceImage
Creating Epic Digital Experiences for B2B Companies
Read More
 
dev_thumb370x200
Five Reasons Why Developers Love Sitefinity Marketplace
Read More