CSharp · Console
using System;
using Lifti;
using Lifti.Querying;
using Lifti.Querying.QueryParts;
using Lifti.Tokenization;
using System.Threading.Tasks;
using System.Collections.Generic;
public class Program
{
public static async Task Main()
{
var index = new FullTextIndexBuilder<string>()
.WithDefaultTokenization(o => o.CaseInsensitive())
.WithQueryParser(new CustomWildcardQueryParser())
.Build();
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)
{
// Use the default tokenizer to normalize the text so it's the same as in the index
queryText = tokenizer.Normalize(queryText);
var queryFragments = new List<WildcardQueryFragment>();
// Add the leading multi-character match
queryFragments.Add(WildcardQueryFragment.MultiCharacter);
// Add each character in the query text, with a trailing multi-character match
foreach (var letter in queryText)
{
queryFragments.Add(WildcardQueryFragment.CreateText(letter.ToString()));
queryFragments.Add(WildcardQueryFragment.MultiCharacter);
}
// Compose the final query
return new Query(new WildcardQueryPart(queryFragments));
}
}