LIFTI Query execution plan

CSharp · Console

/Program.cs

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;
	}
}
;