using Lifti.Querying.QueryParts;
using Lifti.Tokenization;
using System.Threading.Tasks;
using System.Collections.Generic;
public static async Task Main()
var index = new FullTextIndexBuilder<string>()
.WithDefaultTokenization(o => o.CaseInsensitive())
.WithQueryParser(new CustomWildcardQueryParser())
index.BeginBatchChange();
await index.AddAsync("QueryPart", "QueryPart");
await index.AddAsync("ExactWordQueryPart", "ExactWordQueryPart");
await index.AddAsync("FuzzyMatchQueryPart", "FuzzyMatchQueryPart");
await index.AddAsync("FullTextIndex", "FullTextIndex");
await index.AddAsync("IFullTextIndex", "IFullTextIndex");
await index.CommitBatchChangeAsync();
foreach (var item in index.Search("fti"))
Console.WriteLine(item.Key);
public class CustomWildcardQueryParser : IQueryParser
public IQuery Parse(IIndexedFieldLookup fieldLookup, string queryText, ITokenizer tokenizer)
queryText = tokenizer.Normalize(queryText);
var queryFragments = new List<WildcardQueryFragment>();
queryFragments.Add(WildcardQueryFragment.MultiCharacter);
foreach (var letter in queryText)
queryFragments.Add(WildcardQueryFragment.CreateText(letter.ToString()));
queryFragments.Add(WildcardQueryFragment.MultiCharacter);
return new Query(new WildcardQueryPart(queryFragments));