? SIFTS es un paquete Python simple pero poderoso para administrar y consultar colecciones de documentos con soporte para bases de datos SQLite y PostgreSQL.
Está diseñado para manejar eficientemente la búsqueda de texto completo y la búsqueda vectorial, lo que lo hace ideal para aplicaciones que involucran la recuperación de datos de texto a gran escala.
La idea principal de SIFTS es aprovechar las capacidades de búsqueda de texto completo incorporado en SQLite y PostgreSQL y ponerlas a disposición a través de una API pitónica unificada. Puede usar SQLite para pequeños proyectos o desarrollo y cambiar trivialmente a PostgreSQL para escalar su aplicación.
Para la búsqueda de vectores, la similitud de coseno se calcula en PostgreSQL a través de la extensión PGVector, mientras que con la similitud de SQLite se calcula en la memoria.
SIFTS no viene con un modo de servidor, ya que se entiende como una biblioteca para ser importada por otras aplicaciones. La motivación original para su desarrollo era reemplazar a Whoosh como backend de búsqueda en la web Gramps, que se basa en Flask.
Puede instalar Sifts a través de PIP:
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)
)La API está inspirada en el croma.
SIFTS admite la siguiente sintaxis de búsqueda:
and operadoror operador* comodín (en SQLite, admitido en cualquier parte del término de búsqueda, en PostgreSQL solo al final del término de búsqueda)La sintaxis de búsqueda es la misma independientemente del backend.
Los SIFT también se pueden usar como tienda vectorial, utilizado para motores de búsqueda semántica o generación (RAG) de recuperación con modelos de idiomas grandes (LLM).
Simplemente pase la embedding_function Collection para habilitar el almacenamiento de vector y establecer vector_search=True en el método de consulta. Por ejemplo, usando la biblioteca de transformadores de oraciones,
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 ) Las colecciones de PostgreSQL requieren instalar y habilitar la extensión pgvector .
Los documentos se pueden actualizar o eliminar utilizando sus ID.
# Update a document
collection . update ( ids = [ "document_id" ], contents = [ "Updated content" ])
# Delete a document
collection . delete ( ids = [ "document_id" ])¡Las contribuciones son bienvenidas! Siéntase libre de crear un problema si encuentra problemas o tiene una sugerencia de mejora, ¡e incluso mejor presente un PR junto con él!
SIFTS tiene licencia bajo la licencia MIT. Consulte el archivo de licencia para obtener más detalles.
¡Feliz sifting!