Typesense ist eine schnelle, typotolerante Suchmaschine zum Erstellen ansprechender Sucherlebnisse.
Eine Open-Source-Algolia-Alternative &
Eine benutzerfreundlichere ElasticSearch-Alternative
Website | Dokumentation | Roadmap | Slack-Community | Community-Threads | Twitter
Hier sind ein paar Live-Demos , die Typesense in Aktion bei großen Datenmengen zeigen:
? Wenn Sie lieber Videos ansehen:
Sehen Sie eine Funktion in dieser Liste nicht? Durchsuchen Sie unseren Issue-Tracker, wenn ihn bereits jemand angefordert hat, und fügen Sie einen Kommentar hinzu, in dem Ihr Anwendungsfall erläutert wird, oder öffnen Sie ein neues Issue, wenn nicht. Wir priorisieren unsere Roadmap basierend auf dem Feedback der Benutzer und würden uns daher freuen, von Ihnen zu hören.
Hier ist die öffentliche Roadmap von Typesense: https://typesense.link/roadmap.
In der ersten Spalte wird außerdem erläutert, wie wir Funktionen priorisieren, wie Sie die Priorisierung beeinflussen können und wie unser Veröffentlichungsrhythmus aussieht.
Wir würden gerne einen Benchmark mit größeren Datensätzen durchführen, wenn wir große öffentlich zugängliche Datensätze finden können. Wenn Sie Vorschläge für offene strukturierte Datensätze haben, teilen Sie uns dies bitte mit, indem Sie ein Problem eröffnen. Wir würden uns auch freuen, wenn Sie Benchmarks aus Ihren eigenen großen Datensätzen teilen könnten. Bitte senden Sie uns eine PR!
Typesense wird von einer Reihe von Benutzern in verschiedenen Domänen und Branchen verwendet.
Auf Typesense Cloud bedienen wir mehr als 10 MILLIARDEN Suchanfragen pro Monat. Die Docker-Images von Typesense wurden über 12 Millionen Mal heruntergeladen.
Wir haben vor kurzem damit begonnen, in unserem Showcase zu dokumentieren, wer es verwendet. Wenn Sie in die Liste aufgenommen werden möchten, bearbeiten Sie bitte SHOWCASE.md und senden Sie uns eine PR.
Auf der Homepage von Typesense Cloud wird außerdem eine Liste der Benutzerlogos angezeigt.
Option 1: Sie können die Binärpakete herunterladen, die wir für Linux (x86_64 und arm64) und Mac (x86_64) veröffentlichen.
Option 2: Sie können Typesense auch über unser offizielles Docker-Image ausführen.
Option 3: Richten Sie einen verwalteten Cluster mit Typesense Cloud ein:
Hier ist ein kurzes Beispiel, das zeigt, wie Sie eine Sammlung erstellen, ein Dokument indizieren und es in Typesense durchsuchen können.
Beginnen wir mit dem Starten des Typesense-Servers über Docker:
docker run -p 8108:8108 -v/tmp/data:/data typesense/typesense:27.1 --data-dir /data --api-key=Hu52dwsas2AdxdE
Wir haben API-Clients in einigen Sprachen, aber für dieses Beispiel verwenden wir den Python-Client.
Installieren Sie den Python-Client für Typesense:
pip install typesense
Wir können nun den Client initialisieren und eine companies
erstellen:
import typesense
client = typesense . Client ({
'api_key' : 'Hu52dwsas2AdxdE' ,
'nodes' : [{
'host' : 'localhost' ,
'port' : '8108' ,
'protocol' : 'http'
}],
'connection_timeout_seconds' : 2
})
create_response = client . collections . create ({
"name" : "companies" ,
"fields" : [
{ "name" : "company_name" , "type" : "string" },
{ "name" : "num_employees" , "type" : "int32" },
{ "name" : "country" , "type" : "string" , "facet" : True }
],
"default_sorting_field" : "num_employees"
})
Nun fügen wir der gerade erstellten Sammlung ein Dokument hinzu:
document = {
"id" : "124" ,
"company_name" : "Stark Industries" ,
"num_employees" : 5215 ,
"country" : "USA"
}
client . collections [ 'companies' ]. documents . create ( document )
Lassen Sie uns abschließend nach dem Dokument suchen, das wir gerade indiziert haben:
search_parameters = {
'q' : 'stork' ,
'query_by' : 'company_name' ,
'filter_by' : 'num_employees:>100' ,
'sort_by' : 'num_employees:desc'
}
client . collections [ 'companies' ]. documents . search ( search_parameters )
Ist Ihnen der Tippfehler im Abfragetext aufgefallen? Keine große Sache. Typesense behebt Tippfehler sofort!
Eine Schritt-für-Schritt-Anleitung finden Sie hier auf unserer Website.
Dies führt Sie durch den Prozess des Startens eines Typesense-Servers, der Indizierung der darin enthaltenen Daten und der Abfrage des Datensatzes.
Hier ist unsere offizielle API-Dokumentation, verfügbar auf unserer Website: https://typesense.org/api.
Wenn Sie Probleme mit der Dokumentation oder der Anleitung bemerken, teilen Sie uns dies bitte mit oder senden Sie uns hier eine PR: https://github.com/typesense/typesense-website.
Während Sie CURL definitiv verwenden können, um direkt mit Typesense Server zu interagieren, bieten wir offizielle API-Clients an, um die Verwendung von Typesense in der Sprache Ihrer Wahl zu vereinfachen. Die API-Clients sind mit einer intelligenten Wiederholungsstrategie ausgestattet, um sicherzustellen, dass über sie getätigte API-Aufrufe stabil sind, insbesondere in einem HA-Setup.
Wenn wir in Ihrer Sprache keinen API-Client anbieten, können Sie dennoch jede gängige HTTP-Client-Bibliothek verwenden, um direkt auf die APIs von Typesense zuzugreifen.
Hier sind einige von der Community bereitgestellte Clients und Integrationen:
Wir freuen uns über Community-Beiträge, um weitere offizielle Client-Bibliotheken und Integrationen hinzuzufügen. Bitte kontaktieren Sie uns unter [email protected] oder eröffnen Sie ein Problem auf GitHub, um mit uns an der Architektur zusammenzuarbeiten.
Wir verfügen außerdem über die folgenden Framework-Integrationen:
Wir haben hier eine von der Community gepflegte Postman-Sammlung: https://github.com/typesense/postman.
Postman ist eine App, mit der Sie HTTP-Anfragen durch Zeigen und Klicken ausführen können, anstatt sie in das Terminal eingeben zu müssen. Die oben stehende Postman-Sammlung bietet Ihnen Vorlagenanforderungen, die Sie in Postman importieren können, um schnell API-Aufrufe an Typesense durchzuführen.
Mit unserem InstantSearch.js-Adapter können Sie schnell leistungsstarke Sucherlebnisse erstellen, komplett mit Filterung, Sortierung, Paginierung und mehr.
So geht's: https://typesense.org/docs/guide/search-ui-components.html
Elasticsearch ist eine umfangreiche Software, deren Einrichtung, Verwaltung, Skalierung und Feinabstimmung einen nicht unerheblichen Aufwand erfordert. Es bietet Ihnen einige tausend Konfigurationsparameter, um zu Ihrer idealen Konfiguration zu gelangen. Daher eignet es sich besser für große Teams, die über die nötige Bandbreite verfügen, um es produktionsbereit zu machen, es regelmäßig zu überwachen und zu skalieren, insbesondere wenn sie Milliarden von Dokumenten und Petabytes an Daten (z. B. Protokolle) speichern müssen.
Typesense wurde speziell dafür entwickelt, die „Time-to-Market“ zu verkürzen und so ein angenehmes Sucherlebnis zu ermöglichen. Es handelt sich um eine leichte, aber leistungsstarke und skalierbare Alternative, die sich auf die Zufriedenheit und Erfahrung der Entwickler konzentriert und über eine saubere, gut dokumentierte API, eine klare Semantik und intelligente Standardeinstellungen verfügt, sodass sie sofort gut funktioniert, ohne dass Sie viele Knöpfe drehen müssen .
Elasticsearch läuft auch auf der JVM, was allein schon ein ziemlicher Aufwand für die Optimierung sein kann, damit es optimal läuft. Typesense hingegen ist eine einzelne, leichte, eigenständige native Binärdatei, die sich daher einfach einrichten und bedienen lässt.
Einen Funktionsvergleich nebeneinander finden Sie hier.
Algolia ist ein proprietäres, gehostetes Search-as-a-Service-Produkt, das gut funktioniert, wenn die Kosten keine Rolle spielen. Unserer Erfahrung nach stoßen schnell wachsende Websites und Apps schnell an Such- und Indexierungsgrenzen, was bei der Skalierung mit kostspieligen Plan-Upgrades einhergeht.
Typesense hingegen ist ein Open-Source-Produkt, das Sie auf Ihrer eigenen Infrastruktur ausführen oder unser verwaltetes SaaS-Angebot – Typesense Cloud – nutzen können. Die Nutzung der Open-Source-Version ist kostenlos (abgesehen von Ihren eigenen Infrastrukturkosten). Bei Typesense Cloud berechnen wir keine Gebühren nach Datensätzen oder Suchvorgängen. Stattdessen erhalten Sie einen dedizierten Cluster und können ihm so viele Daten und Datenverkehr zuführen, wie er verarbeiten kann. Sie zahlen dafür nur einen festen Stundenpreis und Bandbreitengebühren, abhängig von der von Ihnen gewählten Konfiguration, ähnlich wie bei den meisten modernen Cloud-Plattformen.
Aus Produktsicht ist Typesense im Geiste Algolia näher als Elasticsearch. Allerdings haben wir bei Algolia einige wichtige Einschränkungen behoben:
Algolia benötigt für jede Sortierreihenfolge separate Indizes, die auf die Grenzen Ihres Plans angerechnet werden. Die meisten Indexeinstellungen wie zu durchsuchende Felder, zu facettierende Felder, zu gruppierende Felder, Ranking-Einstellungen usw. werden im Voraus definiert, wenn der Index erstellt wird, und können nicht direkt zum Abfragezeitpunkt festgelegt werden.
Mit Typesense können diese Einstellungen zum Zeitpunkt der Suche über Abfrageparameter konfiguriert werden, was es sehr flexibel macht und neue Anwendungsfälle erschließt. Typesense kann Ihnen auch sortierte Ergebnisse mit einem einzigen Index liefern, anstatt mehrere erstellen zu müssen. Dies trägt dazu bei, den Speicherverbrauch zu reduzieren.
Algolia bietet die folgenden Funktionen, die Typesense derzeit nicht bietet: Personalisierung und serverbasierte Suchanalyse. Für Analysen können Sie Ihre Suche weiterhin clientseitig instrumentieren und Suchmetriken an das Webanalysetool Ihrer Wahl senden.
Wir beabsichtigen, diese Lücke in Typesense zu schließen. Bitte teilen Sie uns jedoch in der Zwischenzeit mit, ob einer dieser Punkte für Ihren Anwendungsfall ein Hingucker ist, indem Sie in unserem Issue-Tracker eine Funktionsanfrage erstellen.
Einen Funktionsvergleich nebeneinander finden Sie hier.
Ein neuer Typesense-Server verbraucht etwa 30 MB Speicher. Wenn Sie mit der Indizierung von Dokumenten beginnen, erhöht sich die Speichernutzung entsprechend. Wie stark es zunimmt, hängt von der Anzahl und Art der von Ihnen indizierten Felder ab.
Wir haben uns bemüht, die In-Memory-Datenstrukturen schlank zu halten. Um Ihnen eine grobe Vorstellung zu geben: Wenn 1 Million Hacker News-Titel zusammen mit ihren Punkten indiziert werden, verbraucht Typesense 165 MB Speicher. Die gleiche Größe dieser Daten auf der Festplatte im JSON-Format beträgt 88 MB. Wenn Sie Zahlen aus Ihren eigenen Datensätzen haben, die wir diesem Abschnitt hinzufügen können, senden Sie uns bitte eine PR!
Unserer Erfahrung nach sind Unternehmen im Allgemeinen besorgt, wenn von ihnen verwendete Bibliotheken GPL-lizenziert sind, da der Bibliothekscode direkt in ihren Code integriert ist und zu abgeleiteten Arbeiten führt und die GPL-Konformität auslöst. Typesense Server ist jedoch eine Serversoftware und wir gehen davon aus, dass Benutzer ihn normalerweise als separaten Daemon ausführen und ihn nicht in ihren eigenen Code integrieren. Die GPL deckt diesen Anwendungsfall großzügig ab und ermöglicht ihn (z. B.: Linux ist GPL-lizenziert) . Nun ist es AGPL, die dafür sorgt, dass Serversoftware, auf die über ein Netzwerk zugegriffen wird, zu einer abgeleiteten Arbeit und nicht zu einer GPL führt. Aus diesem Grund haben wir uns entschieden, AGPL nicht für Typesense zu verwenden.
Wenn nun jemand Änderungen am Typesense-Server vornimmt, erlaubt Ihnen die GPL tatsächlich, die Änderungen weiterhin für sich zu behalten, solange Sie den geänderten Code nicht weitergeben. So kann ein Unternehmen beispielsweise den Typesense-Server ändern und den geänderten Code intern ausführen und muss seine Änderungen trotzdem nicht als Open Source veröffentlichen, solange es den geänderten Code jedem zur Verfügung stellt, der Zugriff auf die geänderte Software hat.
Wenn nun jemand Änderungen am Typesense-Server vornimmt und die Änderungen verteilt, kommt die GPL ins Spiel. Da wir unsere Arbeit in der Community veröffentlicht haben, möchten wir, dass die Änderungen anderer auch der Community zugänglich gemacht werden Geist von Open Source. Zu diesem Zweck verwenden wir die GPL. Andere Lizenzen würden es ermöglichen, unsere Open-Source-Arbeit zu ändern, zu Closed-Source zu machen und zu verbreiten, was wir mit Typesense für die langfristige Nachhaltigkeit des Projekts vermeiden wollen.
Hier finden Sie weitere Hintergrundinformationen zu GPL, wie von Discourse beschrieben: https://meta.discourse.org/t/why-gnu-license/2531. Viele der dort genannten Punkte berühren uns.
Nun gelten alle oben genannten Punkte nur für Typesense Server. Unsere Client-Bibliotheken sind tatsächlich dazu gedacht, in den Code unserer Benutzer integriert zu werden und verwenden daher eine Apache-Lizenz.
Zusammenfassend lässt sich sagen, dass AGPL normalerweise für Serversoftware problematisch ist und wir uns entschieden haben, es nicht zu verwenden. Wir glauben, dass die GPL für Typesense Server die Essenz dessen einfängt, was wir für dieses Open-Source-Projekt wollen. GPL wird seit langem erfolgreich von beliebten Open-Source-Projekten eingesetzt. Unsere Bibliotheken sind weiterhin Apache-lizenziert.
Wenn Sie Besonderheiten haben, die Sie aufgrund eines Lizenzproblems an der Nutzung von Typesense hindern, gehen wir dieses Thema gerne weiter mit Ihnen durch. Bitte wenden Sie sich an uns.
Wenn Sie allgemeine Fragen zu Typesense haben, Hallo sagen oder einfach mitmachen möchten, möchten wir Sie einladen, unserer öffentlichen Slack-Community beizutreten.
Wenn Sie auf Probleme oder Probleme stoßen, erstellen Sie bitte ein GitHub-Problem und wir werden unser Bestes geben, um Ihnen zu helfen.
Wir sind bestrebt, durch unsere Issue-Tracker auf GitHub guten Support zu bieten. Wenn Sie jedoch privaten und priorisierten Support erhalten möchten mit:
Wir bieten die hier beschriebenen kostenpflichtigen Supportoptionen an.
Wir sind ein schlankes Team mit der Mission, die Suche zu demokratisieren, und wir nehmen jede Hilfe an, die wir kriegen können! Wenn Sie sich engagieren möchten, finden Sie hier Informationen darüber, wo wir Ihre Hilfe gebrauchen könnten: Contributing.md
Wenn Sie Updates erhalten möchten, wenn wir neue Versionen veröffentlichen, klicken Sie oben auf die Schaltfläche „Beobachten“ und wählen Sie „Nur Veröffentlichungen“ aus. GitHub sendet Ihnen dann mit jeder neuen Version Benachrichtigungen zusammen mit einem Änderungsprotokoll.
Wir veröffentlichen auf unserem Twitter-Konto auch Updates zu Veröffentlichungen und weiteren Themen im Zusammenhang mit Typesense. Folgen Sie uns hier: @typesense.
Wir werden Updates auch in unserer Slack-Community veröffentlichen.
Wir verwenden Bazel, um Typesense zu erstellen.
Typesense erfordert die folgenden Abhängigkeiten:
Die neuesten Abhängigkeiten finden Sie in den CI-Erstellungsschritten.
Führen Sie nach der Installation Folgendes im Stammverzeichnis des Repos aus:
bazel build //:typesense-server
Der erste Build wird einige Zeit dauern, da im Rahmen des Build-Prozesses auch andere Bibliotheken von Drittanbietern abgerufen und erstellt werden.
© 2016-heute Typesense Inc.