เครื่องมือค้นหาข้อความแบบเต็มตั้งแต่เริ่มต้นโดย Golangʕ◔ϖ◔ʔ (แค่ของเล่น)
สร้างเครือข่ายนักเทียบท่า (omochi_network) โดย:
$ docker network create omochi_network
Omochi ใช้ MariaDB เพื่อจัดเก็บดัชนีและเอกสารแบบกลับด้าน และ Ent สำหรับ ORM
สำหรับการย้ายฐานข้อมูล ให้เชื่อมต่อเชลล์คอนเทนเนอร์นักเทียบท่าโดย:
$ docker-compose run api bash
จากนั้นดำเนินการย้ายฐานข้อมูลโดย:
$ go run ./cmd/migrate/migrate.go
หากต้องการลองใช้เครื่องมือค้นหา โปรเจ็กต์นี้มีชุดข้อมูลสองชุดเป็นตัวอย่างในรูปแบบ TSV
ชุดข้อมูลสำหรับภาษาอังกฤษคือ ชุดข้อมูลชื่อภาพยนตร์ และชุดข้อมูลสำหรับภาษาญี่ปุ่นคือ ชุดข้อมูลชื่อการ์ตูนโดราเอมอน
ในตอนแรก ให้เชื่อมต่อเชลล์คอนเทนเนอร์นักเทียบท่าโดย:
$ docker-compose run api bash
จากนั้นทำการ Seed ข้อมูลโดย:
$ 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 สำหรับการเชื่อมต่อ
หลังจากการ seed ข้อมูล คุณสามารถค้นหาเอกสารโดยส่งคำขอ GET ไปที่ /v1/document/search
พารามิเตอร์การค้นหามีดังนี้:
"keywords"
: คำสำคัญที่จะค้นหา หากมีคำค้นหาหลายคำ ให้ระบุโดยคั่นด้วยเครื่องหมายจุลภาค เช่น "hoge,fuga,piyo"
"mode"
: โหมดการค้นหา โหมดการค้นหาที่สามารถระบุได้คือ "And"
และ "Or"
หลังจาก data seeding โดย ชุดข้อมูลชื่อการ์ตูน 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"
}
]
}
เอ็มไอที