omochi
1.0.0
Golangʕ◔ϖ◔ʔ 从头开始的全文搜索引擎(只是一个玩具)
通过以下方式创建 docker 网络(omochi_network):
$ docker network create omochi_network
Omochi 使用 MariaDB 来存储倒排索引和文档,并使用 Ent 来存储 ORM。
对于数据库迁移,请通过以下方式连接 docker 容器 shell:
$ docker-compose run api bash
然后,通过以下方式运行数据库迁移:
$ go run ./cmd/migrate/migrate.go
为了尝试搜索引擎,该项目提供了两个 TSV 格式的数据集作为样本。
英语的数据集是电影标题数据集,日语的数据集是哆啦A梦漫画标题数据集。
首先,通过以下方式连接 docker 容器 shell:
$ 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 的连接
播种数据后,您可以通过向/v1/document/search
发送 GET 请求来搜索文档。
查询参数如下:
"keywords"
:要搜索的关键词。如果有多个搜索词,请指定它们并用逗号分隔,例如"hoge,fuga,piyo"
"mode"
:搜索模式。可以指定的搜索模式有"And"
和"Or"
通过哆啦A梦漫画标题数据集播种后,可以通过以下方式搜索包含“ドラえもん”的文档:
$ 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"
}
]
}
麻省理工学院