CSharp · Console
using System;
using System.Threading.Tasks;
using Lifti;
using Lifti.Querying;
public class Program
{
public static async Task Main()
{
var index = await CreateAndPopulateTestIndex();
var results = index.Search("item ~> ((1 ~ 2) | (6 & 7))", QueryExecutionOptions.IncludeExecutionPlan);
var executionPlan = results.GetExecutionPlan();
// Accessing the root node
var rootNode = executionPlan.Root;
// Example: iterating through the node hierarchy
void PrintNodeDetails(QueryExecutionPlanNode node, string indent = "")
{
Console.Write($"{indent}#{node.ExecutionOrder} ");
if (node.Kind == QueryExecutionPlanNodeKind.QueryPart)
{
Console.Write($"Searching: {node.Text}");
}
else
{
Console.Write($"{node.Kind} {node.Text}");
}
Console.WriteLine($" - Docs: {node.ResultingDocumentCount}, Timing: {node.InclusiveTiming.TotalMilliseconds}ms ({node.ExclusiveTiming.TotalMilliseconds}ms exc.)");
if (node.Children is var (left, right))
{
PrintNodeDetails(left, indent + " ");
PrintNodeDetails(right, indent + " ");
}
}
PrintNodeDetails(rootNode);
}
private static async Task<FullTextIndex<int>> CreateAndPopulateTestIndex()
{
var index = new FullTextIndexBuilder<int>()
.Build();
index.BeginBatchChange();
for (var i = 0; i < 20; i++)
{
await index.AddAsync(i, $"item {i} {i + 1} {i + 2}");
}
await index.CommitBatchChangeAsync();
return index;
}
}