? Sifts ist ein einfaches, aber leistungsstarkes Python -Paket zum Verwalten und Abfragen von Dokumentensammlungen mit Unterstützung sowohl für SQLite- als auch für Postgresql -Datenbanken.
Es ist so konzipiert, dass es effizient behandelt wird, um die Such- und Vektorsuche mit Volltext zu verarbeiten, sodass es ideal für Anwendungen, die einen großräumigen Textdatenabruf beinhalten.
Die Hauptidee von Sifts besteht darin, die integrierten Volltext-Suchfunktionen in SQLite und PostgreSQL zu nutzen und sie über eine einheitliche, pythonische API verfügbar zu machen. Sie können SQLite für kleine Projekte oder Entwicklung verwenden und trivial zu PostgreSQL wechseln, um Ihre Anwendung zu skalieren.
Für die Vektorsuche wird die Ähnlichkeit der Cosinus in PostgreSQL über die PGVector -Erweiterung berechnet, während mit SQLite -Ähnlichkeit im Speicher berechnet wird.
Sifts wird nicht mit einem Servermodus ausgestattet, da er als Bibliothek von anderen Apps importiert werden soll. Die ursprüngliche Motivation für seine Entwicklung bestand darin, Whoosh als Suchbackend in Gramps Web zu ersetzen, das auf Flask basiert.
Sie können Sifts über PIP installieren:
pip install sifts import sifts
# by default, creates a new SQLite database in the working directory
collection = sifts . Collection ( name = "my_collection" )
# Add docs to the index. Can also update and delete.
collection . add (
documents = [ "Lorem ipsum dolor" , "sit amet" ],
metadatas = [{ "foo" : "bar" }, { "foo" : "baz" }], # otpional, can filter on these
ids = [ "doc1" , "doc2" ], # unique for each doc. Uses UUIDs if omitted
)
results = collection . query (
"Lorem" ,
# limit=2, # optionally limit the number of results
# where={"foo": "bar"}, # optional filter
# order_by="foo", # sort by metadata key (rather than rank)
)Die API ist von Chroma inspiriert.
Sifts unterstützt die folgende Suchsyntax:
and Betreiberor Operator* Wildcard (in SQLite, überall im Suchbegriff unterstützt, nur am Ende des Suchbegriffs) in PostgreSQL)Die Suchsyntax ist unabhängig vom Backend gleich.
SIFTS können auch als Vektor Store verwendet werden, die für semantische Suchmaschinen oder für die Generation von Abrufen mit großer Sprache (LLMs) verwendet werden.
Übergeben Sie einfach die embedding_function an die Collection , um die Vektorspeicherung zu aktivieren und vector_search=True in der Abfragemethode festzulegen. Zum Beispiel mit der Satztransformers -Bibliothek,
from sentence_transformers import SentenceTransformer
model = SentenceTransformer ( "intfloat/multilingual-e5-small" )
def embedding_function ( queries : list [ str ]):
return model . encode ( queries )
collection = sifts . Collection (
db_url = "sqlite:///vector_store.db" ,
name = "my_vector_store" ,
embedding_function = embedding_function
)
# Adding vector data to the collection
collection . add ([ "This is a test sentence." , "Another example query." ])
# Querying the collection with semantic search
results = collection . query ( "Find similar sentences." , vector_search = True ) PostgreSQL -Sammlungen erfordern die Installation und Aktivierung der pgvector -Erweiterung.
Dokumente können mit ihren IDs aktualisiert oder gelöscht werden.
# Update a document
collection . update ( ids = [ "document_id" ], contents = [ "Updated content" ])
# Delete a document
collection . delete ( ids = [ "document_id" ])Beiträge sind willkommen! Fühlen Sie sich frei, ein Problem zu erstellen, wenn Sie auf Probleme stoßen oder einen Verbesserungsvorschlag haben, und reichen Sie noch besser eine PR ein!
Sifts ist unter der MIT -Lizenz lizenziert. Weitere Informationen finden Sie in der Lizenzdatei.
Happy Sieben!