Полнотекстовый поисковик с нуля от Golangʕ◔ϖ◔ʔ (Просто игрушка)
Создайте сеть докеров (omochi_network):
$ docker network create omochi_network
Омочи использует MariaDB для хранения инвертированных индексов и документов и Ent для ORM.
Для миграции базы данных подключите оболочку контейнера Docker следующим образом:
$ docker-compose run api bash
Затем запустите миграцию базы данных:
$ go run ./cmd/migrate/migrate.go
Чтобы попробовать поисковую систему, этот проект предоставляет два набора данных в виде образцов в формате TSV.
Набор данных для английского языка — это набор данных названий фильмов , а набор данных для японского языка — набор данных названий комиксов Doraemon .
Сначала подключите оболочку контейнера докеров:
$ docker-compose run api bash
Затем задайте начальные данные:
$ go run {path to seed.go}
Если вы инициализируете японский набор данных, {path to seed.go}
должен быть ./cmd/seeds/ja/seed.go
. С другой стороны, для английского языка ./cmd/seeds/eng/seed.go
.
После завершения настройки вы можете запустить приложение, выполнив:
$ docker-compose up
Это приложение запускает RESTful API и прослушивает порт 8081 на наличие подключений.
После заполнения данных вы можете искать документы, отправив запрос GET в /v1/document/search
.
Параметры запроса следующие:
"keywords"
: Ключевые слова для поиска. Если поисковых запросов несколько, укажите их через запятую, например "hoge,fuga,piyo"
"mode"
: режим поиска. Можно указать режимы поиска: "And"
и "Or"
После заполнения данных набором данных заголовков комиксов Doraemon вы можете искать документы, которые включают «ドラえもん», по:
$ 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"
},
...
После заполнения данных по набору данных названия фильма вы можете искать документы, которые включают «игрушку» и «историю», по:
$ 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"
}
]
}
Массачусетский технологический институт