Locaticear
Búsqueda de texto completo sin servidor en Python
️ Estado latente :? ?
LocasticeSearch proporciona una búsqueda de texto completo sin servidor alimentado por las capacidades de búsqueda de texto completo de SQLITE, pero tratando de ser compatible con (un subconjunto de) la API de ElasticSearch.
De esa manera, puede desarrollar cómodamente su aplicación de búsqueda de texto sin necesidad de configurar servicios y hacer una transición sin problemas a ElasticSearch para escala o más funciones sin cambiar su código.
Dicho esto, si solo está realizando operaciones de búsqueda básicas dentro del subconjunto compatible con esta biblioteca, y no tiene muchos documentos (~ millones) que justifiquen la implementación de un clúster, Locasticsearch puede ser una alternativa más rápida a Elasticsearch.
Empezando
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"])
También estamos agregando una API simplificada que se puede convertir a ElasticSearch.
Características
- ?% local, sin gestión del servidor
- Pitón puro liviano, sin dependencias externas
- ⚡ Búsquedas súper rápidas gracias a las capacidades de búsqueda de texto completo de SQLite
- ? Sin bloquear. Gracias a la compatibilidad API con el cliente oficial, puede hacer una transición sin problemas a ElasticSearch para escala o más funciones sin cambiar su código.
Instalar
pip install locasticsearch
Para usar o no usar
No debe usar locasticsearch si:
- Está implementando una aplicación sensible a la seguridad. El código de LocasticSearch es muy propenso a los ataques de inyección SQL. Esto debería mejorar en futuros lanzamientos.
- Sus búsquedas son más complicadas de lo que encontraría en un tutorial de Elasticsearch de 5 minutos. Elasticsearch tiene una gran API y es muy poco probable que podamos apoyar incluso una parte considerable de eso.
- Odias bibliotecas de buggy. Locasticsearch es un proyecto muy joven, por lo que se garantizan los errores. Puede verificar las pruebas para ver si sus necesidades están cubiertas.
Debe usar LocasticSearch si:
- No desea un Docker o un Servicio de ElasticeSearch utilizando recursos preciosos en su computadora portátil.
- Solo necesita una búsqueda básica de texto y ElasticSearch sería exagerado
- Desea implementaciones muy fáciles que solo involucren instalaciones de PIP
- Usar Java de un programa Python te hace sentir sucio
Siguientes pasos
Comparación con bibliotecas similares
Algunos pensamientos rápidos sobre las herramientas existentes, no dude en agregar/comentar:
homicidio
La biblioteca de búsqueda de texto de Python Pure Pure más completa con mucho:
- ? Admite destacar, analizadores, expansión de consultas, varias funciones de clasificación, ...
- ? Sin embargo, sin demorar durante mucho tiempo podría ver un avivamiento en https://github.com/whoosh-community/whoosh
- ? Python puro, por lo que no se escala también (aún lo suficientemente rápido para conjuntos de datos pequeños/medianos)
elasticsearch
El gran campeón de la búsqueda de texto completo. Esto es lo que debe usar en la producción:
- ? Muchas características para acomodar cualquier caso de uso
- ? Batalla probada, escalable, performador
- ? Nativo de Python: más complejo para implementar/integrar con el proyecto Python para casos de uso fáciles
tantivy
Esta es una buena recomendación para la búsqueda local de texto completo si no le importa la compatibilidad de la API de búsqueda elástica
- ? Sencillo de configurar y usar:
pip install tantivy - ? Motor rápido a base de óxido
- ? DSL/Biblioteca Bloqueo, sin API de búsqueda elástica
Pyserini
Aunque no es Python puro, Pyserini es un buen compromiso si quieres algo local y escalable:
- ? Acres a Lucene desde dentro de Python (a través del puente Pyjnius Java)
- ? Implementación local / sin servidor
- ? DSL/Biblioteca Bloquear
- ? Tiempo de ejecución de Java adicional
Django Haystack
Django Haystack proporciona una API unificada que le permite conectar diferentes backends de búsqueda (como Solr, Elasticsearch, Whoosh, Xapian, etc.) sin tener que modificar su código:
- ? Muchas características, impulso, resaltado, autocompletado (aunque algunas dependientes de backend)
- ? Posibilidad de cambiar de espalda
- ? DSL/Biblioteca Bloquear
- ? A pesar de apoyar varios backends, Whoosh es el único que es nativo de Python.
xapio
- ? Muy rápido y completo presentado (C ++)
- ? No hay instalación de PIP (necesita compilación de nivel de sistema)
- ? Los enlaces de Python y la documentación no son fáciles de usar
gensim
Si bien Gensim se enfoca en el modelado de temas, puede usar TfidfModel y SparseMatrixSimilarity para la búsqueda de texto. Dicho esto, esto no usa un índice invertido (búsqueda lineal), por lo que tiene una escalabilidad limitada.
- ? Características únicas como la búsqueda aproximada
- ? El enfoque está en el modelado de temas, por lo que no hay API intuitivas para la ingestión/búsqueda de texto completo
- ? No admite la búsqueda de índices invertidos (principalmente escaneo completo y aproximación)
peewee
Peewee es en realidad un ORM más general, pero ofrece abstracciones para usar la búsqueda de texto completo en SQLite:
- ? Soporte para la búsqueda de texto completo utilizando varios backends SQL (aunque sin ElasticSearch)
- ? Clasificación personalizada y funciones de analizador
- ? Sin API compatible con Elasticsearch