Meilisearch-laravel-scout: ์•„์ด๋””๋กœ ๊ฒ€์ƒ‰ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

์— ๋งŒ๋“  2021๋…„ 04์›” 06์ผ  ยท  5์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: meilisearch/meilisearch-laravel-scout

์•ˆ๋…•ํ•˜์„ธ์š”,

ํŠน์ • ๋ชจ๋ธ์— ๋Œ€ํ•ด toSearchableArray ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ตœ์ข… ๋ฐฐ์—ด์— ID ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด php artisan scout:import "App\Book" ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ID ๋ฅผ ํฌํ•จํ•˜๋ฉด ID ๋กœ๋„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฉฐ, ์ด๋Š” ์ œ๊ฐ€ ํƒˆ์ถœํ•˜๊ณ  ์‹ถ์€ ํ–‰๋™์ž…๋‹ˆ๋‹ค. ID ๊ฒ€์ƒ‰์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์˜ˆ์ œ ์ฝ”๋“œ:

    public function toSearchableArray()
    {
        $array = $this->toArray();

        foreach(array_keys($array) as $key) {
            //if I unset ID also, I won't be able to import table data
            if(in_array($key, ['id', 'title', 'name'])) continue;
            unset($array[$key]);
        }

        return $array;
    }

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š” @milosevicn ,

->toSearchableArray() ๋Š” ํŠน์ • ๋ฌธ์„œ(๊ฐ์ฒด)์— ๋Œ€ํ•ด MeiliSearch ๋‚ด์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. id ์ƒ๋žตํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ id ๊ฐ€ ๋ฌธ์„œ ์‹๋ณ„์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ํ‚ค์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ ๋‚ด์—์„œ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์—†๋Š” ์š”์†Œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

MeiliSearch๊ฐ€ ๋ชจ๋“  ํ•„๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์ด ํŒจํ‚ค์ง€์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ณ  MeiliSearch ๋‚ด์—์„œ searchAttributes ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ์—ฌ๊ธฐ ์—์„œ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž์Šต์„œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  5 ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š” @milosevicn ,

->toSearchableArray() ๋Š” ํŠน์ • ๋ฌธ์„œ(๊ฐ์ฒด)์— ๋Œ€ํ•ด MeiliSearch ๋‚ด์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. id ์ƒ๋žตํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ id ๊ฐ€ ๋ฌธ์„œ ์‹๋ณ„์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ํ‚ค์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ ๋‚ด์—์„œ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์—†๋Š” ์š”์†Œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

MeiliSearch๊ฐ€ ๋ชจ๋“  ํ•„๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์ด ํŒจํ‚ค์ง€์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ณ  MeiliSearch ๋‚ด์—์„œ searchAttributes ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ์—ฌ๊ธฐ ์—์„œ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž์Šต์„œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@mmachatschek ๋ฒˆ๊ฑฐ๋กญ๊ฒŒ ํ•ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด์— ๋Œ€ํ•œ ์ƒˆ ํ˜ธ๋ฅผ ์—ด๊ณ  ์‹ถ์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‚ด ์งˆ๋ฌธ๊ณผ ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
php artisan scout:import ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์„œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ๋ชจ๋“  ๊ฒƒ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ /indexes/:index_uid/documents route( ->addDocuments() )๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ toSearchableArray() ๊ทœ์น™. ๋”ฐ๋ผ์„œ ์ „์ฒด ๋ชจ๋ธ์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋ชจ๋“  ์—ด์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ ํŠน์ • ์—ด์„ ์„ ํƒํ•˜์—ฌ ์ด๋ฅผ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ์ง€๋งŒ addDocuments() ํ•จ์ˆ˜ ์ž์ฒด๊ฐ€ toSearchableArray() ์ธ์‹ํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” @milosevicn ,

์ด ํŒจํ‚ค์ง€๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ MeiliSearch PHP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ž˜ํผ์ด๋ฉฐ Laravel Scout๋ฅผ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์„œ๋ฅผ "์ˆ˜๋™์œผ๋กœ" ์ถ”๊ฐ€ํ•  ๋•Œ Scout๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ๋งˆ๋ฒ•(์˜ˆ: ์ธ๋ฑ์Šค์— ์ƒˆ ๊ฐœ์ฒด ์ถ”๊ฐ€ ๋˜๋Š” ํŠน์ • ํ•„๋“œ๋กœ ๊ธฐ์กด ๊ฐœ์ฒด ์—…๋ฐ์ดํŠธ ๋“ฑ)์€ ํ•ด๋‹น ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ธฐ ๋•Œ๋ฌธ์— ์†์‹ค๋ฉ๋‹ˆ๋‹ค.

๋ฌธ์„œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ํŠน๋ณ„ํ•œ ์˜๋„๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@mmachatschek ์— ์‘๋‹ต

๋ฉ€ํ‹ฐํ…Œ๋„Œ์‹œ ์•ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ๊ฐœ๋ณ„ ์•ฑ(์ง‘์ฃผ์ธ ๋ฐ ์„ธ์ž…์ž)์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฌด์–ธ๊ฐ€๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด ์‚ฌ์ „ ์ •์˜๋œ Laravel Scout ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์„œ๋ฅผ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์›นํ›…์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ๋กœ ์ง‘์ฃผ์ธ(์ƒ์„ฑ/์—…๋ฐ์ดํŠธ/์‚ญ์ œ)์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ…Œ๋„ŒํŠธ ์•ฑ์— ์•Œ๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ๋„ŒํŠธ์—์„œ ์›นํ›…์„ ์žก์œผ๋ฉด ํ•ด๋‹น ๋ฌธ์„œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@milosevicn $model->touch() ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ชจ๋ธ์˜ updated_at ์—ด์ด ์—…๋ฐ์ดํŠธ๋˜๊ณ  ํ…Œ๋„ŒํŠธ ์•ฑ์—์„œ updated ์ด๋ฒคํŠธ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด Scout ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์ธ๋ฑ์Šค์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‹น์‹ ์—๊ฒŒ ๋„์›€์ด ๋ ๊นŒ์š”?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰