Locasticsarch
Serverlose Volltext -Suche in Python
Euen ruhender Status :? ?
LocasticSearch bietet serverlose Volltextensuche, die von SQLite Volltext -Suchfunktionen betrieben wird, aber versucht, mit (einer Teilmenge von) der Elasticsearch -API kompatibel zu sein.
Auf diese Weise können Sie Ihre Textsuche bequem entwickeln, ohne Dienste einzurichten und reibungslos zu Elasticsearch für Skala oder mehr Funktionen zu wechseln, ohne Ihren Code zu ändern.
Wenn Sie jedoch nur grundlegende Suchvorgänge innerhalb der von dieser Bibliothek unterstützten Teilmenge durchführen und nicht viele Dokumente (~ Millionen) haben, die eine Cluster -Bereitstellung rechtfertigen würden, kann Locasticsearch eine schnellere Alternative zu Elasticsarch sein.
Erste Schritte
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"])
Wir fügen auch eine vereinfachte API hinzu, die in Elasticsearch konvertiert werden kann.
Merkmale
- "% Lokal, kein Serververwaltung
- Leichte reine Python, keine externen Abhängigkeiten
- ⚡ Super schnelle Suche dank SQLite Volltext -Suchfunktionen
- ? Keine Sperrung. Dank der API -Kompatibilität mit dem offiziellen Kunden können Sie reibungslos in Elasticsearch für Skalen oder mehr Funktionen übergehen, ohne Ihren Code zu ändern.
Installieren
pip install locasticsearch
Zu verwenden oder nicht zu verwenden
Sie sollten nicht locasticsearch verwenden, wenn:
- Sie bereitstellen eine Sicherheitssensitive Anwendung. Der Locasticsearch -Code ist sehr anfällig für SQL -Injektionsangriffe. Dies sollte sich in zukünftigen Veröffentlichungen verbessern.
- Ihre Suchanfragen sind komplizierter als das, was Sie in einem 5 -minütigen Elasticsearch -Tutorial finden würden. Elasticsearch hat eine riesige API und es ist sehr unwahrscheinlich, dass wir selbst einen beträchtlichen Teil davon unterstützen können.
- Sie hassen Buggy -Bibliotheken. Locasticsearch ist ein sehr junges Projekt, daher sind Fehler garantiert. Sie können die Tests überprüfen, um festzustellen, ob Ihre Bedürfnisse abgedeckt sind.
Sie sollten Locasticsearch verwenden, wenn:
- Sie möchten keinen Docker oder einen Elasticsearch -Dienst mit wertvollen Ressourcen in Ihrem Laptop
- Sie benötigen nur grundlegende Textsuche und Elasticsearch wäre übertrieben
- Sie möchten sehr einfache Bereitstellungen, die nur PIP -Installationen umfassen
- Wenn Sie Java aus einem Python -Programm verwenden, fühlen Sie sich schmutzig
Nächste Schritte
Vergleich mit ähnlichen Bibliotheken
Einige kurze Gedanken zu vorhandenen Tools können/Kommentare hinzugefügt werden:
rauschen
Die am besten vorgestellte Python -Textsuchbibliothek bei weitem:
- ? Unterstützt Highlight, Analysatoren, Abfrageerweiterung, mehrere Ranking -Funktionen, ...
- ? Es ist jedoch für lange Zeit eine Wiederbelebung unter https://github.com/whoosh-community/whoosh zu sehen
- ? Pure Python skaliert also nicht auch (immer noch schnell genug für kleine/mittlere Datensätze)
Elasticsarch
Der große Verfechter der Volltextensuche. Das sollten Sie in der Produktion verwenden:
- ? Viele Funktionen, um alle Anwendungsfall zu erhalten
- ? Schlacht getestet, skalierbar, Performant
- ? Non Python Native: Komplexer für die Bereitstellung/Integration in das Python -Projekt für einfache Anwendungsfälle
tantivisch
Dies ist eine gute Empfehlung für die lokale Volltextensuche, wenn Sie sich nicht für die Kompatibilität für elastische Such -API -Kompatibilität interessieren
- ? Einfach einzurichten und zu verwenden:
pip install tantivy - ? Schneller rostbasiertes Motor
- ? DSL/Bibliotheksperrung, keine elastische Such -API
Pyserini
Obwohl Pyserini nicht reines Python ist, ist er ein guter Kompromiss, wenn Sie etwas Lokales und Skalierbares wünschen:
- ? Aspekt nach Lucene aus Python (über Pyjnius Java Bridge)
- ? Serverlose / lokale Bereitstellung
- ? DSL/Bibliotheksperrung
- ? Zusätzliche Java -Laufzeit
Django Haystack
Django Haystack bietet eine einheitliche API, mit der Sie verschiedene Such -Backends (wie Solr, Elasticsearch, Whoosh, Xapian usw.) anschließen können, ohne Ihren Code ändern zu müssen:
- ? Viele Funktionen, Boosting, Highlight, Autoperete (einige sind jedoch abhängig)
- ? Möglichkeit, Backends zu wechseln
- ? DSL/Bibliotheksperrung
- ? Trotz der Unterstützung mehrerer Backends ist Whoosh der einzige, der in Python stammt.
Xapian
- ? Sehr schnell und voll ausgestattet (C ++)
- ? Kein PIP -Installierbar (Bedarf Systemebene Compilation)
- ? Die Python -Bindungen und die Dokumentation sind nicht so benutzerfreundlich
Gensim
Während Gensim sich auf Themenmodellierung konzentriert, können Sie TfidfModel und SparseMatrixSimilarity für die Textsuche verwenden. Das heißt, dies verwendet keinen umgekehrten Index (lineare Suche), sodass es nur eine begrenzte Skalierbarkeit hat.
- ? Einzigartige Funktionen wie ungefähre Suche
- ? Der Fokus liegt auf Themenmodellierung, daher keine intuitiven APIs für die Aufnahme/Suche in Volltext
- ? Unterstützt keine invertierte Indizes -Suche (meist vollständiger Scan und ungefähr)
Peewee
Peewee ist eigentlich ein allgemeineres ORM, bietet aber Abstraktionen für die Verwendung der Volltext -Suche auf SQLite:
- ? Unterstützung für die Volltextsuche mit mehreren SQL -Backends (keine ElasticSearch)
- ? Benutzerdefinierte Ranking- und Analysatorfunktionen
- ? Keine Elasticsearch -kompatible API