IndxSearchLib 5.0.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package IndxSearchLib --version 5.0.1
                    
NuGet\Install-Package IndxSearchLib -Version 5.0.1
                    
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="IndxSearchLib" Version="5.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="IndxSearchLib" Version="5.0.1" />
                    
Directory.Packages.props
<PackageReference Include="IndxSearchLib" />
                    
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 IndxSearchLib --version 5.0.1
                    
#r "nuget: IndxSearchLib, 5.0.1"
                    
#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 IndxSearchLib@5.0.1
                    
#: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=IndxSearchLib&version=5.0.1
                    
Install as a Cake Addin
#tool nuget:?package=IndxSearchLib&version=5.0.1
                    
Install as a Cake Tool

IndxSearchLib

v5.0.1

Indx is a high-performance, embeddable search engine for developers working with structured data. Built from the ground up for speed, typo tolerance, and ease of use.

Whether you're building a modern SaaS platform, a high-throughput microservice, or a lightning-fast local app, Indx is designed to drop in and just work.

Indx differs from other search libraries by using a pattern recognition system rather than a lexical model. It identifies fragments of repeating structure, where the shape and length of a pattern influence recognition, which lets it match text across variations.

Indx At a Glance

  • Pattern recognition search that handles large typos
  • Instant search as you type
  • Schemaless JSON indexing with support for nesting
  • Filters, Facets, Weights, Sorting, Boosting, Dynamic Operations
  • Lightweight software with minimal resource usage

V5.0 New features

  • Dynamic inserts
  • Hybrid AI Search with LLM embeddings
  • Updated 16-bit scoring model
  • Query-time field boosting
  • Better support for agentic search
  • Higher performance - lower memory consumption
  • Synonyms, multidirectional and one-way
  • Pairs with the Indx server for an HTTP API, a dashboard, and MCP access for AI agents

Get Started

Documentation: Indx v5.0 Documentation.

AI skill: skill-indx-search.

npx skills add https://github.com/indxsearch/skill-indx-search --skill indx-search

License & Support

IndxSearchLib is free for production use, including commercial applications.

Free Tier

  • Free for any use case (personal, commercial, production)
  • Unlimited documents with free registration (100k limit without registration)
  • No support, guarantees or SLA
  • Community resources and documentation only

Free License Registration

To unlock unlimited documents, register for a free license. Registration is free and gives you a license file that removes the document limit.

For teams requiring guaranteed support and SLA commitments, we offer:

  • Professional Support: Email-based technical support with priority response times
  • Enterprise Support: SLA, direct engineering access, rapid response, and dedicated contact

Visit indx.co for pricing. See LICENSE.md for full terms.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  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 (1)

Showing the top 1 NuGet packages that depend on IndxSearchLib:

Package Downloads
Infidex.Benchmark

Package Description

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on IndxSearchLib:

Repository Stars
lofcz/Infidex
The high-performance .NET search engine based on pattern recognition.
Version Downloads Last Updated
5.0.5 109 10/8/2026
5.0.4 101 10/8/2026
5.0.3 100 10/7/2026
5.0.2 97 10/6/2026
5.0.1 99 10/5/2026
5.0.0 102 10/3/2026
Loading failed

Three fixes to 5.0.0, and what is known to be wrong or weak in 5.0 after them. The first two
     fixes are of answers that were wrong with nothing said, so take this release if you load
     vectors or rely on a failed load being a failed load.
     
     - Fixed: **a filter on a vector search returned the wrong documents when some documents had no
       vector.** The filter was asked about the vector's number in the search graph, where it is
       numbered by the document's place in the store, so every document without a vector shifted
       all that followed: a filter on red returned blue documents and dropped red ones, with no
       error.
     - Fixed: **a `Load` that fails leaves no documents, and `Index()` no longer builds on one.**
       The load reported the failure and set `Error`, but kept the documents it had read, and
       `Index()` then succeeded: the engine was `Ready` on part of the data. `Index()` is now
       refused in `Loading`, `Indexing` and `Error`, with the reason on the monitor.
     - Fixed: **a field made `Facetable` while a search was running could stay without facets.**
       The lists of searchable and facetable fields are cached, and a search that was building one
       as a role was set stored its list after the change had cleared the cache. A list built
       across a change is no longer kept.
     - Changed: **a vector field has no other role, and a wrong vector is refused.**
       `TrySetFieldConfiguration` throws `ArgumentException` for `Embeddable` together with
       Searchable, Filterable, Facetable, Sortable, WordIndexing or PreloadFilters, or on a field
       that is not an array of numbers, and `Load` refuses such a configuration. A configuration
       saved with such a combination is repaired when it is read: the vector field keeps
       `Embeddable` and loses the other roles, which never did anything useful on a vector.
       `InsertJsonRecord(s)`, `UpdateJsonRecord(s)` and `UpdateField` return `false`, storing
       nothing, for a vector that is empty, of another length than the field's, or not numbers;
       they used to store the document and then refuse, or take it in without a vector.
     
     ### Known limitations of 5.0
     
     Vector search:
     
     - **A dataset with a vector field takes no insert, update or delete.** Every update of a
       document removes its vector and adds it again, also when only another field changed (a
       price), and after a few the vector search no longer finds the document; `Index()` does not
       repair it. A delete leaves a result list short. Load the dataset, index it and search it; to
       change it, load it again.
     - **Documents with one and the same vector hide the others.** The same text embedded for many
       products gives many identical vectors, which close into a group the search does not get out
       of.
     - **A vector search misses some of the true nearest, more on a larger catalogue.** Measured on
       real embeddings of 1 536 numbers against the exact answer: of the ten nearest it found 73 %
       on 43 000 products and 96 % on 29 000. The order among those it does find is right.
     - **The first vector decides the length for the field.** If the first document's vector has
       the wrong length, every correct one after it is refused.
     - **A `Load` takes in a document whose vector is empty or holds something other than
       numbers**, with no vector and no word. Insert and update refuse it.
     - **A vector is taken to be of unit length.** The score is the dot product as it is, so
       vectors of other lengths are not ranked by cosine.
     - **A document with a vector costs about 110 KB of memory** for a vector of 1 536 numbers.
     
     In general:
     
     - **`Status` can report `Ready` a few milliseconds before `Index()` has finished**, and a
       search in that moment is answered "not now" (`Result.DidTimeOut`). Waiting on the
       `ProcessMonitor` instead of polling the state avoids it.
     - **A role or a weight set straight on a `Field`** is not saved correctly by an engine with a
       `Persistence`: `Searchable`, `Sortable` and `Weight` are saved with the value from before,
       and the other roles are not saved at all. `TrySetFieldConfiguration` followed by the
       caller's own save is not affected.
     - **`TrySetFieldConfiguration` throws for a value or a role it refuses** (a negative weight, a
       `BM25b` outside 0 to 1, `Filterable` on a field with no type, a vector field with another
       role) and returns `false` only for a field name it does not have.
     - **`DeleteJsonRecord`, `DeleteJsonRecords`, `DeleteFilter` and `LoadDocumentFieldsFromDb`
       return `false` without a reason.** For `DeleteJsonRecord` that is no document with the key,
       an engine that is not `Ready`, or an index build under way.
     
     All of these are addressed in the release that follows 5.0.