Mecanismo de pesquisa de texto completo do zero por Golangʕ◔ϖ◔ʔ (apenas um brinquedo)
Crie uma rede docker (omochi_network) por:
$ docker network create omochi_network
Omochi usa MariaDB para armazenar índices e documentos invertidos e Ent para ORM.
Para migração de banco de dados, conecte o shell do contêiner do docker:
$ docker-compose run api bash
Em seguida, executando a migração do banco de dados:
$ go run ./cmd/migrate/migrate.go
Para testar o mecanismo de busca, este projeto fornece dois conjuntos de dados como amostras no formato TSV.
O conjunto de dados para inglês é um conjunto de dados de títulos de filmes , e o conjunto de dados para japonês é um conjunto de dados de títulos de quadrinhos Doraemon .
Primeiro, conecte o shell do contêiner do docker:
$ docker-compose run api bash
Em seguida, semeie os dados por:
$ go run {path to seed.go}
Se você inicializar com um conjunto de dados japonês, {path to seed.go}
deverá ser ./cmd/seeds/ja/seed.go
. Por outro lado, para inglês, ./cmd/seeds/eng/seed.go
.
Depois de concluir a configuração, você pode iniciar o aplicativo executando:
$ docker-compose up
Este aplicativo inicia uma API RESTful e escuta conexões na porta 8081
Depois de semear os dados, você pode pesquisar documentos enviando uma solicitação GET para /v1/document/search
.
Os parâmetros de consulta são os seguintes:
"keywords"
: palavras-chave para pesquisar. Se houver vários termos de pesquisa, especifique-os separados por vírgulas como "hoge,fuga,piyo"
"mode"
: modo de pesquisa. Os modos de pesquisa que podem ser especificados são "And"
e "Or"
Após a propagação dos dados pelo conjunto de dados do título em quadrinhos Doraemon , você pode pesquisar documentos que incluem "ドラえもん" por:
$ 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"
},
...
Após a propagação dos dados pelo conjunto de dados do título do filme , você pode pesquisar documentos que incluem "brinquedo" e "história" por:
$ 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