Skip to content

Latest commit

 

History

363 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

embeddingsearchLogo

embeddingsearch is a self-hosted semantic search server built on vector embeddings.
It lets you index and semantically search text using modern embedding models.

It's designed to be flexible, extensible, and easy to use.

Project outline

Logo

What embeddingsearch offers:

  • Privacy and flexibility by allowing one to self-host everything, including:
    • Ollama
    • OpenAI-compatible APIs (like LocalAI)
  • Astonishing accuracy when using multiple models for single indices
  • Ease-of-use and ease-of-implementation
    • The server offers a front-end for management and status information, as well as a decorated swagger back-end
    • The indexer can also be self-hosted and serves as a host for executing indexing scripts
    • The client library can be used to develop your own client software that posts queries or creates indices
  • Caching & persistency
    • Generating embeddings is expensive. So why not cache AND store them?
    • Query results can also be cached.
    • "Doesn't that eat a lot of precious RAM?" - My own testing showed: embeddings take up around 4200-5200 bytes each depending on the request string size. So around 4-5 GB per million cached embeddings.

This repository comes with a:

  • Server
  • Client library (C#)
  • Scripting based indexer service that supports the use of
    • Python
    • CSharp (Roslyn - at-runtime evaluation)
    • CSharp (Reflection - compiled)
    • Lua (Planned)
    • Javascript (Planned)

How to set up

Server

(Docker also available! See Docker installation)

  1. Install the inferencing tool of your choice, (e.g. ollama) and pull a few models that support generating embeddings.
  2. Install the depencencies
  3. Set up a mysql database
  4. Set up the configuration
  5. In src/Server execute dotnet build && dotnet run to start the server
  6. (optional) Create a searchdomain using the web interface

Indexer

(Docker now available! See Docker installation)

  1. Install the dependencies
  2. Configure the indexer
  3. Set up your indexing script(s)
  4. In src/Indexer execute dotnet build && dotnet run to start the indexer

Known issues

Issue Solution
System.DllNotFoundException: Could not load libpython3.14.so with flags RTLD_NOW | RTLD_GLOBAL: libpython3.12.so: cannot open shared object file: No such file or directory Install python3.14-dev via apt. Also: try running the indexer using /usr/bin/dotnet instead of dotnet (to make sure dotnet is not running as a snap)

Planned features and support

  • Support for other database types (MSSQL, SQLite, PostgreSQL, MongoDB, Redis)

AI disclosure

The core logic and structure of this project was human-authored. Parts of code that are relevant for performance and stability are strictly human-authored.

Elements that were co-authored by AI include:

  • Indexer front-end: LD-Reborn and Big Pickle (OpenCode)
  • Indexer document processing: LD-Reborn and Copilot
  • Server front-end: LD-Reborn and Qwen3-Coder:latest / Qwen3-Coder-Next:latest

Pipelines

Build & Publish

Community

Discord

About

An embeddings based search server written in C#

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages