محرك بحث النص الكامل من الصفر بواسطة Golangʕ◔ϖ◔ʔ (مجرد لعبة)
إنشاء شبكة عامل إرساء (omochi_network) عن طريق:
$ docker network create omochi_network
يستخدم Omochi MariaDB لتخزين الفهارس والمستندات المقلوبة، وEnt لـ ORM.
لترحيل قاعدة البيانات، قم بتوصيل حاوية حاوية عامل الإرساء عن طريق:
$ 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"
}
]
}
معهد ماساتشوستس للتكنولوجيا