Volltextsuchmaschine von Grund auf von Golangʕ◔ϖ◔ʔ (Nur ein Spielzeug)
Erstellen Sie ein Docker-Netzwerk (omochi_network) durch:
$ docker network create omochi_network
Omochi verwendet MariaDB zum Speichern invertierter Indizes und Dokumente und Ent für ORM.
Verbinden Sie für die Datenbankmigration die Docker-Container-Shell wie folgt:
$ docker-compose run api bash
Führen Sie dann die Datenbankmigration durch:
$ go run ./cmd/migrate/migrate.go
Um die Suchmaschine auszuprobieren, stellt dieses Projekt zwei Datensätze als Beispiele im TSV-Format bereit.
Der Datensatz für Englisch ist ein Filmtiteldatensatz und der Datensatz für Japanisch ist ein Doraemon-Comictiteldatensatz .
Verbinden Sie zunächst die Docker-Container-Shell wie folgt:
$ docker-compose run api bash
Dann Seed-Daten durch:
$ go run {path to seed.go}
Wenn Sie mit einem japanischen Datensatz initialisieren, sollte {path to seed.go}
./cmd/seeds/ja/seed.go
lauten. Für Englisch hingegen ./cmd/seeds/eng/seed.go
.
Nach Abschluss der Einrichtung können Sie die Anwendung starten, indem Sie Folgendes ausführen:
$ docker-compose up
Diese App startet eine RESTful-API und lauscht auf Port 8081 auf Verbindungen
Nach dem Seeding der Daten können Sie Dokumente durchsuchen, indem Sie eine GET-Anfrage an /v1/document/search
senden.
Die Abfrageparameter lauten wie folgt:
"keywords"
: Zu durchsuchende Schlüsselwörter. Wenn es mehrere Suchbegriffe gibt, geben Sie diese durch Kommas getrennt ein, z. B. "hoge,fuga,piyo"
"mode"
: Suchmodus. Als Suchmodi können "And"
und "Or"
angegeben werden. Nach dem Daten-Seeding durch den Doraemon-Comic-Titeldatensatz können Sie nach Dokumenten suchen, die „ドラえもん“ enthalten:
$ curl "http://localhost:8081/v1/document/search?keywords=ドラえもん" | jq .
{
"documents": [
{
"id": 12054,
"content": "ドラえもんの歌",
"tokenized_content": [
"ドラえもん",
"歌"
],
"created_at": "2022-07-08T12:59:49+09:00",
"updated_at": "2022-07-08T12:59:49+09:00"
},
{
"id": 11992,
"content": "恋するドラえもん",
"tokenized_content": [
"恋する",
"ドラえもん"
],
"created_at": "2022-07-08T12:59:48+09:00",
"updated_at": "2022-07-08T12:59:48+09:00"
},
{
"id": 11230,
"content": "ドラえもん登場!",
"tokenized_content": [
"ドラえもん",
"登場"
],
"created_at": "2022-07-08T12:59:44+09:00",
"updated_at": "2022-07-08T12:59:44+09:00"
},
...
Nach dem Daten-Seeding nach Filmtitel-Datensatz können Sie nach Dokumenten suchen, die „Spielzeug“ und „Geschichte“ enthalten:
$ curl "http://localhost:8081/v1/document/search?keywords=toy,story&mode=And" | jq .
{
"documents": [
{
"id": 1,
"content": "Toy Story",
"tokenized_content": [
"toy",
"story"
],
"created_at": "2022-07-08T13:49:24+09:00",
"updated_at": "2022-07-08T13:49:24+09:00"
},
{
"id": 39,
"content": "Toy Story of Terror!",
"tokenized_content": [
"toy",
"story",
"terror"
],
"created_at": "2022-07-08T13:49:34+09:00",
"updated_at": "2022-07-08T13:49:34+09:00"
},
{
"id": 83,
"content": "Toy Story That Time Forgot",
"tokenized_content": [
"toy",
"story",
"time",
"forgot"
],
"created_at": "2022-07-08T13:49:53+09:00",
"updated_at": "2022-07-08T13:49:53+09:00"
},
{
"id": 213,
"content": "Toy Story 2",
"tokenized_content": [
"toy",
"story"
],
"created_at": "2022-07-08T13:50:35+09:00",
"updated_at": "2022-07-08T13:50:35+09:00"
},
{
"id": 352,
"content": "Toy Story 3",
"tokenized_content": [
"toy",
"story"
],
"created_at": "2022-07-08T13:51:23+09:00",
"updated_at": "2022-07-08T13:51:23+09:00"
}
]
}
MIT