Meilisearch ist eine flexible Suchmaschine die mit einer einzelnen Datei gestartet werden kann und deren Daten in JSON vorliegen. Der Fokus von Meilisearch liegt dabei in seiner Einfachheit. Meilisearch wird dabei mit einer einzelnen Binary gestartet und geupdatet und über einen API-Endpunkt (normalerweise über Port 7700) verwaltet. Dabei kennt Meilisearch indexes worin man seine Daten gruppieren kann. Der Fokus liegt dabei wie der Name verrät auf eine effiziente und schnelle Suchfunktion.
Die Installation ist sehr einfach wie Meilisearch auf der Webseite auch angibt, kann das ganze mittels curl durchgeführt werden. Dabei bietet Meilisearch ein eigenes Script, welches die richtige Datei direkt downloadet und zur Verfügung stellt.
1# Install Meilisearch
2curl -L https://install.meilisearch.com | sh
dieser Befehl installiert Meilisearch direkt auf unserem System. Quelle: https://www.meilisearch.com/docs/learn/self_hosted/getting_started_with_self_hosted_meilisearch#setup-and-installation
Wem das zu heikel ist kann Meilisearch auch über Github herunterladen. Dafür muss man allerdings sich die passende Version für sein Betriebssystem selber suchen. https://github.com/meilisearch/meilisearch/releases
Nach der Installation oder dem Herunterladen kann Meilisearch einfach über die Datei gestartet werden:
1./meilisearch
Nach dem starten sollte folgendes zu sehen sein.
1
2888b d888 d8b 888 d8b 888
38888b d8888 Y8P 888 Y8P 888
488888b.d88888 888 888
5888Y88888P888 .d88b. 888 888 888 .d8888b .d88b. 8888b. 888d888 .d8888b 88888b.
6888 Y888P 888 d8P Y8b 888 888 888 88K d8P Y8b "88b 888P" d88P" 888 "88b
7888 Y8P 888 88888888 888 888 888 "Y8888b. 88888888 .d888888 888 888 888 888
8888 " 888 Y8b. 888 888 888 X88 Y8b. 888 888 888 Y88b. 888 888
9888 888 "Y8888 888 888 888 88888P' "Y8888 "Y888888 888 "Y8888P 888 888
10
11Config file path: "none"
12Database path: "./data.ms"
13Server listening on: "http://localhost:7700"
14Environment: "development"
15Commit SHA: "unknown"
16Commit date: "unknown"
17Package version: "1.11.0"
18
19Thank you for using Meilisearch!
20
21
22We collect anonymized analytics to improve our product and your experience. To learn more, including how to turn off analytics, visit our dedicated documentation page: https://www.meilisearch.com/docs/learn/what_is_meilisearch/telemetry
23
24Anonymous telemetry: "Enabled"
25Instance UID: "36be6eb1-850b-47ac-a094-6e7332f70d52"
26
27
28
29 No master key was found. The server will accept unidentified requests.
30
31 A master key of at least 16 bytes will be required when switching to a production environment.
32
33
34We generated a new secure master key for you (you can safely use this token):
35
36>> --master-key 2pXxAogofwwptqdC8M2K6JKnMHprBveWqQb_RoCdMGE <<
37
38Restart Meilisearch with the argument above to use this new and secure master key.
39
40Check out Meilisearch Cloud! https://www.meilisearch.com/cloud?utm_campaign=oss&utm_source=engine&utm_medium=cli
41Documentation: https://www.meilisearch.com/docs
42Source code: https://github.com/meilisearch/meilisearch
43Discord: https://discord.meilisearch.com
44
452024-11-05T14:30:05.293500Z INFO actix_server::builder: starting 2 workers
462024-11-05T14:30:05.293551Z INFO actix_server::server: Actix runtime found; starting in Actix runtime
Meilisearch bietet auch ein Docker-Image an, welches man nutzen kann. Zum schnellen starten können wir somit einfach folgenden BEfehl verwenden um Meilisearch unter localhost auf Port 7700 bereitzustellen. Wichtig hierbei ist, dass wir kein Volume anhängen und somit die Daten bei einem Container neustart wieder weg sind.
1docker run -it -p 7700:7700 getmeili/meilisearch:v1.11
für einen persistenten Storage kann folgendes Kommando verwendet werden:
1docker run -it --rm \
2 -p 7700:7700 \
3 -v $(pwd)/meili_data:/meili_data \
4 getmeili/meilisearch:v1.11
$(pwd) nimmt dabei das aktuelle Verzeichnis und erstellt ein Ordner namens
meili_data
. In diesem Ordner befinden sich nun unsere Daten und sind auch bei einem neustart eines Containers noch vorhanden.
Auch beim verwenden von docker, sollte es nach dem Befehl wie folgt aussehen:
1➜ docker run -it -p 7700:7700 getmeili/meilisearch:v1.11
2
3Unable to find image 'getmeili/meilisearch:v1.11' locally
4v1.11: Pulling from getmeili/meilisearch
54ee6e5bfe850: Download complete
62bb2d33b639d: Download complete
731da728cf16c: Download complete
8b2f2a4856b46: Download complete
91336307e0d55: Download complete
10Digest: sha256:b9be3d2d42510a5cacb900a70d1c2533c718a75ff6975465918312c575062a13
11Status: Downloaded newer image for getmeili/meilisearch:v1.11
12
13888b d888 d8b 888 d8b 888
148888b d8888 Y8P 888 Y8P 888
1588888b.d88888 888 888
16888Y88888P888 .d88b. 888 888 888 .d8888b .d88b. 8888b. 888d888 .d8888b 88888b.
17888 Y888P 888 d8P Y8b 888 888 888 88K d8P Y8b "88b 888P" d88P" 888 "88b
18888 Y8P 888 88888888 888 888 888 "Y8888b. 88888888 .d888888 888 888 888 888
19888 " 888 Y8b. 888 888 888 X88 Y8b. 888 888 888 Y88b. 888 888
20888 888 "Y8888 888 888 888 88888P' "Y8888 "Y888888 888 "Y8888P 888 888
21
22Config file path: "none"
23Database path: "./data.ms"
24Server listening on: "http://0.0.0.0:7700"
25Environment: "development"
26Commit SHA: "3753f87fd89ed57045c2e05172a4139011579ed6"
27Commit date: "2024-10-21T15:08:49Z"
28Package version: "1.11.0"
29
30Thank you for using Meilisearch!
31
32
33We collect anonymized analytics to improve our product and your experience. To learn more, including how to turn off analytics, visit our dedicated documentation page: https://www.meilisearch.com/docs/learn/what_is_meilisearch/telemetry
34
35Anonymous telemetry: "Enabled"
36Instance UID: "c5929660-d83b-4ae1-80fe-2cbf861a8716"
37
38
39
40 No master key was found. The server will accept unidentified requests.
41
42 A master key of at least 16 bytes will be required when switching to a production environment.
43
44
45We generated a new secure master key for you (you can safely use this token):
46
47>> --master-key RdIqTt6UupmrwOCqEFNavj8F_Kg-oGZrSs9aUpkV5v4 <<
48
49Restart Meilisearch with the argument above to use this new and secure master key.
50
51Check out Meilisearch Cloud! https://www.meilisearch.com/cloud?utm_campaign=oss&utm_source=engine&utm_medium=cli
52Documentation: https://www.meilisearch.com/docs
53Source code: https://github.com/meilisearch/meilisearch
54Discord: https://discord.meilisearch.com
55
562024-11-05T14:32:19.237141Z INFO actix_server::builder: starting 10 workers
572024-11-05T14:32:19.237295Z INFO actix_server::server: Actix runtime found; starting in Actix runtime
Der einfachheit halber verwenden wir hier Meilisearch mit cURL
, welches mittlerweile auf allen Systemen vorhanden sein sollte.
Wir können mittels cURL nun ein einzelnes Dokument hinzufügen oder aber eine ganze Datei mit unseren Dokumenten. Um ein einzelnes Dokument hinzuzufügen können wir folgendes nutzen:
1curl \
2 -X POST 'http://localhost:7700/indexes/countries/documents' \
3 -H 'Content-Type: application/json' \
4 --data '{"id": "0", "name": "Germany", "population": 84480000, "short": "DE"}'
Einfacher ist es aber natürlich gleich eine ganze Sammlng von Dokumenten anzugeben und diese mittels einer Datei hochzuladen:
1[
2 {
3 "id": "1",
4 "name": "Austria",
5 "population": 9123000,
6 "short": "AT"
7 },
8 {
9 "id": "2",
10 "name": "Netherlands",
11 "population": 17880000,
12 "short": "NL"
13 },
14 {
15 "id": "3",
16 "name": "Belgium",
17 "population": 11820000,
18 "short": "BE"
19 }
20]
unsere countries.json Datei
1curl \
2 -X POST 'http://localhost:7700/indexes/countries/documents?primaryKey=id' \
3 -H 'Content-Type: application/json' \
4 --data-binary @countries.json
Der Index wird automatisch erstellt. Indices sorgen dafür unsere Daten zu gruppieren. In einem Index sind nun mehrere Dokumente drin. In unserem Fall heißt unser Index nun countries
.
Meilisearch stellt über den Port 7700
auch ein UserInterface breit auf dem gesucht, alle Indices und auch alle Dokumente angeschaut werden können. Das Interface sieht nachdem wir unser Dokument hinzugefügt haben z.B. so aus:
Die suche ergibt sich auch mittels REST-API und dem Endpunkt: /indexes/countries/search
(dabei ist countries unser Index und kann natürlich auch ein anderer Index sein)
Bei unserem Beispiel ist die komplette URL dann wie folgt: ttp://localhost:7700/indexes/countries/search
Die Suche wird nun mittels eines JSON Body und dem Attribut q
welches für Query steht zu definieren.
Definieren wir uns also eine Query welche wie folgt aussieht:
1{
2 "q": "Austria"
3}
liefert uns das folgendes Ergebnis:
1{
2 "hits": [
3 {
4 "id": "1",
5 "name": "Austria",
6 "population": 9123000,
7 "short": "AT"
8 }
9 ],
10 "query": "Austria",
11 "processingTimeMs": 0,
12 "limit": 20,
13 "offset": 0,
14 "estimatedTotalHits": 1
15}
Als cURL sieht das ganze dann nun wie folgt aus:
1curl --location 'http://localhost:7700/indexes/countries/search' \
2--header 'Content-Type: application/json' \
3--data '{
4 "q": "Austria"
5}'
Geupdatet können einzelne Dokumente über diesen Endpoint /indexes/{index_uid}/documents
. Sollte das Dokument noch nicht vorhanden sein, wird dieses dann erstellt. Der JSON Body enthält dann die ID und die zu ändernden Felder.
1curl \
2 -X PUT 'http://localhost:7700/indexes/movies/documents' \
3 -H 'Content-Type: application/json' \
4 --data-binary '[
5 {
6 "id": 1,
7 "name": "Austria"
8 }
9 ]'
Gelöscht werden können Dokumente via der ID oder aber mittels eines Filters.
Die Löschung mit der ID funktioniert recht einfach über folgenden Endpoint /indexes/{index_uid}/documents/{document_id}
Die Dokument ID würden wir dann über die Suche bekommen.
1curl \
2 -X DELETE 'http://localhost:7700/indexes/countries/documents/1'
Das löschen mit einem Filter funktioniert nun über folgendem Endpoint /indexes/{index_uid}/documents/delete
und mit einem JSON-Body und einem Feld namens filter.
1curl \
2 -X POST http://localhost:7700/indexes/countries/documents/delete \
3 -H 'Content-Type: application/json' \
4 --data-binary '{
5 "filter": "short = AT"
6 }'
Nachgelesen kann das ganze unter der offizielen Dokumentation
https://www.meilisearch.com/docs/reference/api/documents#documents
Allgemeine Dokumentation: https://www.meilisearch.com/docs