? O SIFTS é um pacote Python simples, mas poderoso, para gerenciar e consultar coleções de documentos com suporte para bancos de dados SQLite e PostgreSQL.
Ele foi projetado para lidar com eficiência de pesquisa de texto completo e pesquisa de vetores, tornando-o ideal para aplicativos que envolvam recuperação de dados de texto em larga escala.
A principal idéia do SIFTS é alavancar os recursos de pesquisa de texto completo embutido no SQLite e PostgreSQL e disponibilizá-los por meio de uma API pitônica unificada. Você pode usar o SQLite para pequenos projetos ou o desenvolvimento e mudar trivialmente para o PostgreSQL para escalar seu aplicativo.
Para pesquisa vetorial, a similaridade de cosseno é calculada no PostgreSQL através da extensão PGVector, enquanto a similaridade do SQLite é calculada na memória.
O SIFTS não vem com um modo de servidor, pois é uma biblioteca a ser importada por outros aplicativos. A motivação original para o seu desenvolvimento foi substituir Whoosh como back -end de pesquisa na Web Gramps, que é baseada no Flask.
Você pode instalar SIFTs via 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)
)A API é inspirada no Chroma.
O SIFTS suporta a seguinte sintaxe de pesquisa:
and operadoror operador* Wildcard (em sqlite, suportado em qualquer lugar do termo de pesquisa, no PostgreSQL apenas no final do termo de pesquisa)A sintaxe da pesquisa é a mesma, independentemente do back -end.
O SIFTS também pode ser usado como loja de vetores, usada para mecanismos de pesquisa semântica ou geração de recuperação upmentada (RAG) com grandes modelos de idiomas (LLMS).
Simplesmente passe o embedding_function para a fábrica Collection para ativar o armazenamento vetorial e definir vector_search=True no método de consulta. Por exemplo, usando a Biblioteca de Transformers de Sentença,
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 ) As coleções PostGresql requerem instalação e ativação da extensão pgvector .
Os documentos podem ser atualizados ou excluídos usando seus IDs.
# Update a document
collection . update ( ids = [ "document_id" ], contents = [ "Updated content" ])
# Delete a document
collection . delete ( ids = [ "document_id" ])As contribuições são bem -vindas! Sinta -se à vontade para criar um problema se encontrar problemas ou tiver uma sugestão de melhoria e enviar ainda melhor um PR junto com ele!
A SIFTS é licenciada sob a licença do MIT. Consulte o arquivo de licença para obter detalhes.
Feliz peneira!