Locásticaearch
Pesquisa de texto completo sem servidor em Python
️ Status adormecido :? ?
O LocasticSearch fornece pesquisa de texto completa sem servidor alimentada pelos recursos de pesquisa de texto completo do SQLite, mas tentando ser compatível com (um subconjunto de) a API Elasticsearch.
Dessa forma, você pode desenvolver confortavelmente sua pesquisa de texto Appplication sem precisar configurar serviços e fazer a transição suave para o Elasticsearch para escala ou mais recursos sem alterar seu código.
Dito isto, se você estiver apenas realizando operações básicas de pesquisa no subconjunto suportado por esta biblioteca e não tiver muitos documentos (~ milhões) que justificariam ir para uma implantação de cluster, o Locasticsearch pode ser uma alternativa mais rápida ao Elasticsearch.
Começando
from locasticsearch import Locasticsearch
from datetime import datetime
es = Locasticsearch()
doc = {
"author": "kimchy",
"text": "Elasticsearch: cool. bonsai cool.",
"timestamp": datetime(2010, 10, 10, 10, 10, 10),
}
res = es.index(index="test-index", doc_type="tweet", id=1, body=doc)
res = es.get(index="test-index", doc_type="tweet", id=1)
print(res["_source"])
# this will get ignored in Locasticsearch
es.indices.refresh(index="test-index")
res = es.search(index="test-index", body={"query": {"match_all": {}}})
print("Got %d Hits:" % res["hits"]["total"]["value"])
for hit in res["hits"]["hits"]:
print("%(timestamp)s %(author)s: %(text)s" % hit["_source"])
Também estamos adicionando uma API simplificada que pode ser convertida em Elasticsearch.
Características
- ?% local, sem gerenciamento de servidor
- Python puro leve, sem dependências externas
- ⚡ Pesquisas super rápidas graças aos recursos de pesquisa de texto completo do SQLite
- ? Sem bloqueio. Graças à compatibilidade da API com o cliente oficial, você pode fazer a transição suave para o Elasticsearch para escala ou mais recursos sem alterar seu código.
Instalar
pip install locasticsearch
Para usar ou não usar
Você não deve usar o LocásticoSearch se:
- Você está implantando um aplicativo sensível à segurança. O Código do Locásticoearch é muito propenso a ataques de injeção de SQL. Isso deve melhorar em lançamentos futuros.
- Suas pesquisas são mais complicadas do que você encontraria em um tutorial de pesquisa de elasticsearch de 5 minutos. Elasticsearch tem uma API enorme e é muito improvável que possamos suportar até uma parte considerável disso.
- Você odeia bibliotecas de buggy. O LocasticSearch é um projeto muito jovem, para que os bugs sejam garantidos. Você pode verificar os testes para ver se suas necessidades estão cobertas.
Você deve usar o LocasticSearch se:
- Você não quer um Docker ou um Serviço de Pesquisa de Elastics usando recursos preciosos em seu laptop
- Você só precisa de pesquisa básica de texto e elasticsearch seriam exagerados
- você quer implantações muito fáceis que envolvem apenas instalações pip
- Usar Java de um programa Python faz você se sentir sujo
PRÓXIMOS PASSOS
Comparação com bibliotecas semelhantes
Alguns pensamentos rápidos sobre as ferramentas existentes, fique à vontade para adicionar/comentar:
whoosh
A biblioteca de pesquisa de texto Pure Pure Pure Pure Pure: de longe:
- ? Suporta destaque, analisadores, expansão de consulta, várias funções de classificação, ...
- ? Incorporado por um longo tempo, porém, pode ver um renascimento em https://github.com/whoosh-community/whoosh
- ? Python puro, então não é escala (ainda rápido o suficiente para conjuntos de dados pequenos/médios)
Elasticsearch
O grande campeão da pesquisa completa de texto. É isso que você deve usar na produção:
- ? Muitos recursos para acomodar qualquer caso de uso
- ? Batalha testada, escalável, performante
- ? Não Python Native: mais complexo para implantar/integrar ao projeto Python para facilitar casos de uso
Tantivy
Esta é uma boa recomendação para pesquisa local de texto completo se você não se importa com a compatibilidade da API de pesquisa elástica
- ? Simples de configurar e usar:
pip install tantivy - ? Motor baseado em ferrugem rápida
- ? DSL/biblioteca bloqueio, sem API de pesquisa elástica
Pyserini
Embora não seja puro Python, Pyserini é um bom compromisso se você quiser algo local e escalável:
- ? Acess para Lucene de dentro de Python (via ponte de Pyjnius java)
- ? Implantação sem servidor / local
- ? DSL/biblioteca bloqueio
- ? Tempo de execução extra em Java
Django Haystack
O Django Haystack fornece uma API unificada que permite conectar diferentes backnds de pesquisa (como Solr, Elasticsearch, Whoosh, Xapian etc.) sem ter que modificar seu código:
- ? Muitos recursos, impulsionando, destaque, preenchimento automático (alguns dependentes de back -end)
- ? Possibilidade de alternar back -ends
- ? DSL/biblioteca bloqueio
- ? Apesar de apoiar vários back -end, Whoosh é o único nativo de Python.
Xapian
- ? Muito rápido e completo em destaque (C ++)
- ? Nenhum pip instalável (precisa de compilação no nível do sistema)
- ? As ligações python e a documentação não são tão fáceis de usar
Gensim
Enquanto o Gensim se concentra na modelagem de tópicos, você pode usar TfidfModel e SparseMatrixSimilarity para a pesquisa de texto. Dito isto, isso não usa um índice invertido (pesquisa linear), para que tenha escalabilidade limitada.
- ? Recursos únicos, como pesquisa aproximada
- ? O foco está na modelagem de tópicos, portanto, nenhuma APIs intuitiva para ingestão/pesquisa de texto completo
- ? Não suporta pesquisas de índices invertidos (principalmente varredura completa e aproximado)
Peewee
Peewee é na verdade um ORM mais geral, mas oferece abstrações para usar a pesquisa completa de texto no SQLite:
- ? Suporte para pesquisa completa de texto usando vários back -ends do SQL (sem pesquisa de elasticidade)
- ? Funções personalizadas de classificação e analisador
- ? Sem API compatível com elasticsearch