Search code examples
searchlucenesearch-enginelucene.netwildcard

How to perform a wildcard search in Lucene


I know that Lucene has extensive support for wildcard searches and I know you can search for things like:

Stackover* (which will return Stackoverflow)

That said, my users aren't interested in learning a query syntax. Can Lucene perform this type of wildcard search using an out-of-box Analyzer? Or should I append "*" to every search query?


Solution

  • Doing this with string manipulations is tricky to get right, especially since the QueryParser supports boosting, phrases, etc.

    You could use a QueryVisitor that rewrites TermQuery into PrefixQuery.

    public class PrefixRewriter : QueryVisitor {
        protected override Query VisitTermQuery(TermQuery query) {
            var term = query.GetTerm();
            var newQuery = new PrefixQuery(term);
            return CopyBoost(query, newQuery);
        }
    }
    

    The QueryVisitor base class can currently be found at gitlab.

    The code was initially posted on a blog post which is now defunct. The blog post is still available at archive.org.