---
title: "oneindex docs"
url: https://recursiveai.org/oneindex/docs/
description: "Everything about OneIndex: getting started, mapping a class, user text, filters, facets and sorting, vectors, hybrid search and reranking with bundled…"
version: "0.4.0-preview.2"
---

# oneindex docs

Everything about OneIndex: getting started, mapping a class, user text, filters, facets and sorting, vectors, hybrid search and reranking with bundled models, the EF Core, folder and VectorData packages, the browser and static index, durability and how it is tested, relevance and benchmarks against Lucene.NET, and the file formats. OneIndex is a preview, 0.4.0-preview.2.

## Start

- [Getting started](https://recursiveai.org/oneindex/docs/getting-started/index.md): Install OneIndex 0.4.0-preview.2 for .NET 10, index a few objects and search them, in C# with no server and no native code. OneIndex is an embedded search…
- [Overview](https://recursiveai.org/oneindex/docs/overview/index.md): OneIndex is unaffiliated with other products named OneIndex, OneSearch or similar.
- [Architecture](https://recursiveai.org/oneindex/docs/architecture/index.md): OneIndex is one engine in layers. Each layer is public, in its own namespace, and is built only on the layers before it.
- [Mapping documents](https://recursiveai.org/oneindex/docs/mapping/index.md): A document type is an ordinary class whose properties carry attributes. A source generator (it runs at build time inside the RecursiveAI.OneIndex package)…
- [Reads like .NET](https://recursiveai.org/oneindex/docs/reads-like/index.md): Each layer of OneIndex is shaped after a .NET API that readers already know. This page puts them side by side. Every OneIndex snippet here is compiled and…
- [Migrating from Lucene.NET](https://recursiveai.org/oneindex/docs/migrating-from-lucene-net/index.md): This page maps the concepts and calls of Lucene.NET 4.8 (the 4.8.0-beta line on NuGet) to OneIndex. It is written from Lucene.NET's public documentation…
- [The oneindex tool](https://recursiveai.org/oneindex/docs/cli/index.md): oneindex is a .NET tool (package RecursiveAI.OneIndex.Cli) that turns a folder into a searchable passage index, searches it with citations, and builds a…

## Searching

- [User text](https://recursiveai.org/oneindex/docs/user-text/index.md): What a person types into a search box. index.Search(text) accepts any string and never throws on it: unbalanced quotes, lone operators, control…
- [Strict query syntax](https://recursiveai.org/oneindex/docs/query-syntax/index.md): The strict syntax is an opt-in query language for people and programs that want exactly what they wrote. It is a separate grammar from the forgiving user…
- [Filter strings](https://recursiveai.org/oneindex/docs/filter-strings/index.md): A filter string selects documents by field values, with conditions joined by AND, OR and NOT. The syntax follows Meilisearch's documented filter…
- [LINQ filters](https://recursiveai.org/oneindex/docs/linq/index.md): index.Search(text).Where(predicate) narrows a search with a C# lambda. The lambda is translated, never run: the engine walks the expression tree and…
- [Query JSON](https://recursiveai.org/oneindex/docs/query-json/index.md): A search as data: a JSON document with "v": 1, checked against a schema as it is read. It is meant for programs and language models that build a query…
- [Search as an LLM tool](https://recursiveai.org/oneindex/docs/search-tool/index.md): SearchTool.For() describes a search over T as a tool a language model can call. The arguments are a query JSON document; the model's tool call goes…
- [Queries and limits](https://recursiveai.org/oneindex/docs/queries/index.md): How the query engine (QueryEngine, an IWeightFactory) runs each query record. Scoring is in scoring.md. A query is data; QueryEngine.CreateWeight checks…
- [More like this](https://recursiveai.org/oneindex/docs/more-like-this/index.md): Finds documents that resemble a text or an indexed document. MoreLikeThisQuery is a query record like the others; the happy path has…

## Ranking and refining

- [Scoring](https://recursiveai.org/oneindex/docs/scoring/index.md): How a document's score is made, what the statistics cover, the defaults and why, and the explain format. Query semantics are in queries.md.
- [Function scores](https://recursiveai.org/oneindex/docs/function-scores/index.md): A function score changes the relevance score of a query with numbers computed from column values: popularity, recency, distance. It does not change which…
- [Ranking rules](https://recursiveai.org/oneindex/docs/ranking-rules/index.md): An optional way to rank results: a bucket sort over a list of rules, in the manner of Meilisearch's documented ranking rules. Without rules a search is…
- [Typo tolerance and as-you-type](https://recursiveai.org/oneindex/docs/typo-tolerance/index.md): What user text does when a word is misspelled or half typed. It applies to forgiving user text (index.Search("...")). The strict parser and query JSON…
- [Synonyms](https://recursiveai.org/oneindex/docs/synonyms/index.md): Synonyms are applied at query time over analyzed terms. Nothing is stored in the index for them, so changing the synonym table never needs a reindex.…
- [Did you mean](https://recursiveai.org/oneindex/docs/did-you-mean/index.md): OneIndex.Suggest.DidYouMean proposes corrected queries from the terms of a field's dictionary in a snapshot. It is separate from typo-tolerant matching…
- [Sorting and paging](https://recursiveai.org/oneindex/docs/sorting/index.md): This note is normative for ordering hits by columns and for paging with a cursor. The columns are in columns.md; the query surfaces that expose it are…
- [Facets and distinct](https://recursiveai.org/oneindex/docs/facets/index.md): This note is normative for OneIndex.Aggregations.FacetCollector, FacetValueSearch, OneIndex.Search.DistinctCollector and the happy-path calls Facets and…
- [Aggregations](https://recursiveai.org/oneindex/docs/aggregations/index.md): This note is normative for OneIndex.Aggregations (Aggregation requests, AggregationCollector, the result types and AggregationBuilder). Facets, which…
- [Geo search](https://recursiveai.org/oneindex/docs/geo/index.md): This note is normative for geo points: the index, the filters and sorting by distance. The terms follow Meilisearch's documented geosearch (_geoRadius…

## Vectors and models

- [Vectors and HNSW](https://recursiveai.org/oneindex/docs/vectors/index.md): This note is normative for the vector part of a segment: what the kernels compute, how closeness becomes a score, how the graph is built and searched…
- [Hybrid search](https://recursiveai.org/oneindex/docs/hybrid/index.md): This note is normative for HybridQuery, SearchQuery.Hybrid(...) and the hybrid forms of query JSON. Automatic embedding is in auto-embedding.md; the…
- [Reranking](https://recursiveai.org/oneindex/docs/rerank/index.md): A cross-encoder reads the query and a passage together, which ranks better than comparing a stored vector or counting words, and costs one model pass per…
- [Automatic embedding](https://recursiveai.org/oneindex/docs/auto-embedding/index.md): This note is normative for [Vector(From = ...)], the embedder an index uses, and the cache that keeps unchanged text from being embedded again.
- [Models](https://recursiveai.org/oneindex/docs/models/index.md): Package RecursiveAI.OneIndex.Models. It depends on core and on RecursiveAI.OneModel only.
- [Learned sparse vectors](https://recursiveai.org/oneindex/docs/sparse/index.md): A sparse vector field holds a weight per token (a SPLADE-style expansion, Formal et al., SIGIR 2021 and arXiv:2109.10086, or the output of an…
- [Multi-vector: MaxSim](https://recursiveai.org/oneindex/docs/multi-vector/index.md): Late interaction (ColBERT; Khattab and Zaharia, SIGIR 2020) represents a text as one vector per token and scores a query against a document by MaxSim: for…
- [IVF vector index](https://recursiveai.org/oneindex/docs/ivf/index.md): An inverted-file (IVF) index groups vectors by cluster and answers a query by scanning only the few clusters whose centres are nearest to it (Jegou, Douze…

## Packages and platforms

- [EF Core integration](https://recursiveai.org/oneindex/docs/entity-framework/index.md): RecursiveAI.OneIndex.EntityFrameworkCore keeps OneIndex indexes in step with an EF Core database and lets a search compose with an EF query. It is not an…
- [Folder indexing](https://recursiveai.org/oneindex/docs/files/index.md): RecursiveAI.OneIndex.Files turns a folder into searchable, cited passages. RecursiveAI.OneIndex.Files.Ocr adds scans and photos of text. A passage index…
- [VectorData adapter](https://recursiveai.org/oneindex/docs/vectordata/index.md): RecursiveAI.OneIndex.VectorData is a vector-store collection over OneIndex for Microsoft.Extensions.VectorData (version 10.11.0 of the abstractions, the…
- [In the browser](https://recursiveai.org/oneindex/docs/browser/index.md): Everything in the core package runs in browser WebAssembly (browser-wasm, no threads). Storage there is one of three things:
- [Static index](https://recursiveai.org/oneindex/docs/static-index/index.md): A static index is an ordinary OneIndex index cut into small immutable files, so a browser (or any HTTP client) can search it from a plain file server or…

## Durability and storage

- [Durability](https://recursiveai.org/oneindex/docs/durability/index.md): What OneIndex promises about your data when a process is killed, a disk call fails or the power goes out, under which conditions, what it does not…
- [Writer and reader processes](https://recursiveai.org/oneindex/docs/processes/index.md): An index directory can be open in one writer and in any number of readers at once, in different processes. This note says how, what each operating system…
- [Storage interface](https://recursiveai.org/oneindex/docs/storage/index.md): IStorage is a flat set of named files. It is the only way the engine touches bytes, so one implementation can be local files, memory, read-only HTTP…
- [Commit format](https://recursiveai.org/oneindex/docs/commit-format/index.md): All multi-byte integers are little-endian. A varint is an unsigned LEB128 integer in its shortest form (a reader rejects a trailing zero group and values…
- [Segments and merges](https://recursiveai.org/oneindex/docs/segments/index.md): This note is normative for the index lifecycle. File frames, the commit file and the commit protocol are in commit-format.md; the storage interface is in…
- [Schema evolution](https://recursiveai.org/oneindex/docs/schema-evolution/index.md): An index is opened with the schema the application declares (for the happy path, the attributes of the document type). When the index already holds a…

## Text index

- [Analysis](https://recursiveai.org/oneindex/docs/analysis/index.md): An Analyzer turns text into terms. It is a tokenizer followed by filters, built once and reused. This page is normative for the contract, the registered…
- [Asian-language analysis](https://recursiveai.org/oneindex/docs/analysis-asian/index.md): Japanese, Chinese, Korean, Thai, Lao, Khmer and Myanmar write words without spaces (Korean with spaces, but with agglutinated endings). The package…
- [Decompounding](https://recursiveai.org/oneindex/docs/decompounding/index.md): German, Dutch, the Scandinavian languages, Finnish and Icelandic write compounds as one word ("Haustür", "kirjakauppa"). A search for "Tür" should find…
- [Term dictionary](https://recursiveai.org/oneindex/docs/term-dictionary/index.md): Format of the terms part of a segment (codec terms, versions 1 and 2) and the term-lookup operations built on it. Version 2 is written by this build…
- [Postings and block-max WAND](https://recursiveai.org/oneindex/docs/postings/index.md): Formats of the postings part (codec postings, version 1) and the lengths part (codec lengths, version 1), and the top-k disjunction that uses their block…
- [Columns](https://recursiveai.org/oneindex/docs/columns/index.md): This note is normative for the columns part of a segment: per-document values of the fields that filtering, sorting, faceting and aggregation read. File…
- [Point index](https://recursiveai.org/oneindex/docs/points/index.md): This note is normative for the points part of a segment: range lookups over numeric, date and bool fields without scanning the documents, and rectangle…
- [Stored source](https://recursiveai.org/oneindex/docs/stored-source/index.md): This note is normative for the stored part of a segment: the original values of the fields the schema stores, compressed in blocks, with random access by…
- [Dynamic JSON fields](https://recursiveai.org/oneindex/docs/dynamic/index.md): A [Dynamic] property holds a JSON value whose shape is not known in advance. The whole value is stored with the document and comes back unchanged. Its…

## Measurement

- [Relevance](https://recursiveai.org/oneindex/docs/relevance/index.md): How retrieval quality is measured on the BEIR sets, with the comparator side first. Speed is in benchmarks.md.
- [Benchmarks](https://recursiveai.org/oneindex/docs/benchmarks/index.md): How the text rows are measured against Lucene.NET and the native engines. The relevance method is in relevance.md. The published rows are in the milestone…

## Reference

- [Search contracts](https://recursiveai.org/oneindex/docs/search-contracts/index.md): These are the shapes the query engine is built against.
- [Changelog](https://recursiveai.org/oneindex/docs/changelog/index.md): All notable changes are listed here. The format follows Keep a Changelog and the project follows Semantic Versioning.

## Cookbook

- [All recipes](https://recursiveai.org/oneindex/cookbook/index.md): 6 short, task-first recipes with complete code.
