EASYTools.Verbex 0.2.0

dotnet add package EASYTools.Verbex --version 0.2.0
                    
NuGet\Install-Package EASYTools.Verbex -Version 0.2.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="EASYTools.Verbex" Version="0.2.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="EASYTools.Verbex" Version="0.2.0" />
                    
Directory.Packages.props
<PackageReference Include="EASYTools.Verbex" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add EASYTools.Verbex --version 0.2.0
                    
#r "nuget: EASYTools.Verbex, 0.2.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package EASYTools.Verbex@0.2.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=EASYTools.Verbex&version=0.2.0
                    
Install as a Cake Addin
#tool nuget:?package=EASYTools.Verbex&version=0.2.0
                    
Install as a Cake Tool

<div align="center"> <img src="https://raw.githubusercontent.com/jchristn/verbex/main/assets/logo.png" alt="Verbex Logo" width="128" height="128">

Verbex

NuGet .NET License

A high-performance inverted index library for full-text search.

Verbex is in ALPHA - we welcome your feedback, improvements, and bugfixes </div>

Screenshots

<div align="center"> <img src="https://raw.githubusercontent.com/jchristn/verbex/main/assets/screenshot1.png" alt="Screenshot 1" width="800"> </div>

<div align="center"> <img src="https://raw.githubusercontent.com/jchristn/verbex/main/assets/screenshot2.png" alt="Screenshot 2" width="800"> </div>

<div align="center"> <img src="https://raw.githubusercontent.com/jchristn/verbex/main/assets/screenshot3.png" alt="Screenshot 3" width="800"> </div>

Quick Start

Get up and running in seconds with Docker:

# Clone and start
git clone https://github.com/jchristn/verbex.git
cd verbex/docker
docker compose up -d

# Server available at http://localhost:8080
# Dashboard available at http://localhost:8200

For detailed Docker configuration, see DOCKER.md.

From Source

git clone https://github.com/jchristn/verbex.git
cd verbex
dotnet build
dotnet run --project src/Verbex.Server    # Start REST API
dotnet run --project src/TestConsole      # Interactive shell

Library Usage

using Verbex;

// Create index
var config = new VerbexConfiguration { StorageMode = StorageMode.InMemory };
using var index = new InvertedIndex(config);

// Add documents
await index.AddDocumentAsync(Guid.NewGuid(), "The quick brown fox", "doc1.txt");
await index.AddDocumentAsync(Guid.NewGuid(), "Machine learning algorithms", "doc2.txt");

// Search
var results = await index.SearchAsync("fox machine");
foreach (var result in results)
    Console.WriteLine($"{result.DocumentId}: {result.Score:F4}");

Key Features

  • Flexible Storage: In-memory SQLite, persistent on-disk SQLite, or persistent external Postgres, SQL Server, or MySQL
  • TF-IDF Scoring: Relevance-ranked search results
  • Text Processing: Lemmatization, stop word removal, token filtering
  • Metadata Filtering: Labels and tags for document organization
  • Filtered Enumeration: Filter document listings by labels and tags
  • Wildcard Search: Use * query to return all documents, optionally filtered by metadata
  • Batch Operations: Retrieve multiple documents in a single request
  • Backup & Restore: Create portable backups and restore indices
  • Thread-Safe: Optimized for concurrent read-heavy workloads
  • REST API: Production-ready HTTP server with authentication
  • CLI Tool: Professional command-line interface (vbx)
  • Web Dashboard: React-based management UI

Components

Component Description
Verbex Core library (NuGet package)
Verbex.Server REST API server
VerbexCli Command-line interface
TestConsole Interactive testing shell
Dashboard React web interface

Storage Modes

// In-Memory (fast, non-persistent)
var config = VerbexConfiguration.CreateInMemory();

// On-Disk (persistent)
var config = VerbexConfiguration.CreateOnDisk(@"C:\VerbexData");

Database Backends

Verbex supports four database backends: SQLite, PostgreSQL, MySQL, and SQL Server.

Choosing a Backend

Use Case Recommended Backend
Development & testing SQLite (in-memory)
Single-server, low ingestion (<100 docs/min) SQLite (file)
Production with concurrent users PostgreSQL
High ingestion throughput (>1K docs/min) PostgreSQL, MySQL, or SQL Server
Existing database infrastructure Match your infrastructure

Why SQLite for Development

SQLite is the default and requires no external database server. It's ideal when:

  • Running tests or developing locally
  • Ingestion rate is low (documents arrive infrequently)
  • Only a single application instance accesses the index
  • You want zero-configuration setup

Why Server-Based Databases for Production

PostgreSQL, MySQL, and SQL Server are preferred for production workloads because:

  1. Connection Pooling: Server-based databases maintain connection pools (1-100 connections by default) allowing true parallel query execution. SQLite serializes all operations through a single connection.

  2. Write Concurrency: Server-based databases use row-level locking, enabling multiple concurrent writes. SQLite uses a single-writer model where write operations queue behind each other.

  3. Horizontal Scaling: Server-based databases support read replicas for distributing query load. SQLite is limited to a single server.

  4. High Ingestion Rates: When documents arrive faster than a single writer can process, server-based databases handle the concurrent load without queuing delays.

Configuration Examples

// SQLite (development)
var settings = DatabaseSettings.CreateInMemory();

// SQLite (low-volume production)
var settings = DatabaseSettings.CreateSqliteFile("./verbex.db");

// PostgreSQL (recommended for production)
var settings = DatabaseSettings.CreatePostgresql(
    hostname: "localhost",
    databaseName: "verbex",
    username: "verbex_user",
    password: "secret"
);

// MySQL
var settings = DatabaseSettings.CreateMysql(
    hostname: "localhost",
    databaseName: "verbex",
    username: "verbex_user",
    password: "secret"
);

// SQL Server
var settings = DatabaseSettings.CreateSqlServer(
    hostname: "localhost",
    databaseName: "verbex",
    username: "verbex_user",
    password: "secret"
);

Text Processing

var config = new VerbexConfiguration
{
    StorageMode = StorageMode.OnDisk,
    StorageDirectory = @"C:\Data\Index",
    MinTokenLength = 3,
    MaxTokenLength = 20,
    Lemmatizer = new BasicLemmatizer(),
    StopWordRemover = new BasicStopWordRemover()
};

CLI Example

vbx index create docs --storage disk --lemmatizer --stopwords
vbx doc add readme --content "Getting started with Verbex"
vbx search "getting started" --limit 10
vbx backup docs --output docs.vbx
vbx restore docs.vbx --name docs-restored

REST API Example

# Authenticate
curl -X POST http://localhost:8080/v1.0/auth/login \
  -H "Content-Type: application/json" \
  -d '{"Username": "admin", "Password": "password"}'

# Search
curl -X POST http://localhost:8080/v1.0/indices/myindex/search \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{"Query": "machine learning"}'

# Batch retrieve documents
curl -X GET "http://localhost:8080/v1.0/indices/myindex/documents?ids=doc1,doc2,doc3" \
  -H "Authorization: Bearer YOUR_TOKEN"

# Backup an index
curl -X POST http://localhost:8080/v1.0/indices/myindex/backup \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -o myindex-backup.vbx

# Restore from backup
curl -X POST http://localhost:8080/v1.0/indices/restore \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -F "file=@myindex-backup.vbx" \
  -F "name=restored-index"

Documentation

Configuration

Property Default Description
StorageMode InMemory InMemory or OnDisk
StorageDirectory null SQLite database location
DefaultMaxSearchResults 100 Search result limit
MinTokenLength 0 Minimum token length (0=disabled)
MaxTokenLength 0 Maximum token length (0=disabled)
Lemmatizer null Word lemmatization processor
StopWordRemover null Stop word filter

Support

Contributing

git clone https://github.com/jchristn/verbex.git
cd verbex
dotnet build
dotnet run --project src/Test  # Run test suite

License

MIT License - free for commercial and personal use.

Attribution

Logo icon by Freepik from Flaticon

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (3)

Showing the top 3 NuGet packages that depend on EASYTools.Verbex:

Package Downloads
EASYTools.Verbex.Server

Package Description

EASYTools.VEBEX.Mcp

Package Description

EASYTools.VebexCli

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.2.0 110 3/29/2026
0.1.9 110 3/29/2026

Verbex is in ALPHA.