Vor ein paar Wochen habe ich Meilisearch entdeckt und bin begeistert. Es ist eine schnelle, Open-Source-Suchmaschine. Ich habe schon öfter darüber nachgedacht, ob ich Elasticsearch in meinen Projekten verwenden sollte, aber es schien mir immer zu kompliziert und zu aufgebläht. Meilisearch ist einfach zu installieren und zu verwenden. Da es in Rust geschrieben ist und eine REST-API bietet, ist es einfach, es in jede Anwendung zu integrieren. (Hust, kein Java wie bei Elasticsearch.)
Besonders wenn man bereits eine fertige Datenbank hat und nur eine schnelle Suche benötigt, ist Meilisearch eine gute Wahl.
Die Installation von Meilisearch ist einfach. Unter Debian/Ubuntu fügt man einfach das Repository hinzu und installiert es.
echo "deb [trusted=yes] https://apt.fury.io/meilisearch/ /" | sudo tee /etc/apt/sources.list.d/fury.list
sudo apt update && sudo apt install meilisearchAlternativ kann man die Installation auch mit Saltstack automatisieren:
meilisearch_repo:
pkgrepo.managed:
- name: deb [trusted=yes] https://apt.fury.io/meilisearch/ /
- file: /etc/apt/sources.list.d/meilisearch.list
meilisearch_pkg:
pkg.installed:
- name: meilisearch
- require:
- pkgrepo: meilisearch_repoDanach kann Meilisearch einfach gestartet werden:
meilisearch --http-addr <your-ip>:7700Achtung: Meilisearch ist in diesem Modus standardmäßig ungesichert. Es ist also ratsam, es in einer sicheren Umgebung zu verwenden oder es zu schützen. (Vielleicht komme ich darauf noch einmal zu sprechen, das wäre für diesen Blog ja angebracht.)
Ich habe ein Projekt, das auf Postgres basiert, und ich wollte Meilisearch darin verwenden. Glücklicherweise gibt es ein Tool, das das Synchronisieren von Postgres-Daten mit Meilisearch einfach macht. Es heißt meilisync.
Bei der Installation von Meilisync gibt es einiges zu beachten, und das möchte ich hier mal aufzeigen.
Es ist wichtig, dass die Datenbank so konfiguriert ist, dass sie die WAL-Protokollierung unterstützt. Das bedeutet, dass die Datenbank so konfiguriert sein muss, dass sie die Änderungen protokolliert, die an den Daten vorgenommen werden. Das ist notwendig, damit Meilisync die Änderungen an den Datenbanken verfolgen kann.
Dafür muss die postgresql.conf angepasst werden:
vim /etc/postgresql/15/main/postgresql.confFolgendes muss hinzugefügt werden:
Außerdem muss das wal2json-Plugin installiert werden. Das ist ein Plugin, das die Änderungen an den Datenbanken in JSON-Format protokolliert. Das ist notwendig, damit Meilisync die Änderungen an den Datenbanken verfolgen kann.
Ich musste ein wenig suchen, um das Paket zu finden, aber unter Debian 12 ist es postgresql-15-wal2json. Das kann einfach mit apt installiert werden: apt install postgresql-15-wal2json
Dann muss Postgres neu gestartet werden: systemctl restart postgresql
Ich möchte Meilisync in einer virtuellen Umgebung installieren, um die Abhängigkeiten zu verwalten. Dafür muss ich sicherstellen, dass Python 3.11 und venv installiert sind.
Python 3.11 kann unter Debian 12 mit apt install python3.11-venv installiert werden.
Nun kann ich meilisync installieren dafür gehe ich ins opt Verzeichnis und erstelle ein Verzeichnis für meilisync. Dann erstelle ich eine virtuelle Umgebung und installiere meilisync.
cd opt
mkdir meilisync
python3 -m venv venv
source venv/bin/activate
pip3 install meilisyncBei den ersten Durchläufen von Meilisync musste ich noch ein paar Abhängigkeiten nachinstallieren:
pip3 install motor
pip3 install asyncmy
pip install psycopg2-binary
pip3 install redisDas Wichtigste ist nun die Konfiguration von Meilisync. Dafür erstelle ich eine config.yaml Datei im opt/meilisync Verzeichnis:
progress:
type: file
source:
type: postgres
host: 127.0.0.1
port: 5432
user: <your-postgres-user>
password: <your-postgres-password>
database: <your-database-name>
meilisearch:
api_url: http://<meilisearch-url>:7700
api_key:
insert_size: 2000
insert_interval: 10
sync:
- table: users
pk: id
full: true
fields:
id:
name:
email:Nun kann ich meilisync starten: meilisync start
Das Tool estellt automatisch die nötigen Indizes auf Meilisearch und beginnt mit der Synchronisierung der Daten.
Die Indizes sind die Daten, die von Meilisearch durchsucht werden. In diesem Fall handelt es sich um die Tabelle users und die Felder id, name und email.
Unter der URL http://<meilisearch-url>:7700 kann ich nun die Suche testen und prüfen, ob sie so funktioniert, wie ich es mir vorstelle.