[Meilisearch] ์‹œ์ž‘

[์›๋ณธ ๋งํฌ]

์ด์ „ ํฌ์ŠคํŠธ
https://blog.naver.com/sssang97

linux ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ meilisearch๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‹ค๋ค„๋ณด๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•œ๋‹ค.




์„ค์น˜

์„ค์น˜๋Š” ๊ฐ„๋‹จํ•œ ์‰˜์ฝ”๋“œ ํ•œ์ค„๋กœ ๋๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

curl -L https://install.meilisearch.com | sh

๊ทธ๋Ÿฌ๋ฉด ์ด๋ ‡๊ฒŒ, ์‹คํ–‰ํ•œ ์‹œ์ ์˜ ๊ฒฝ๋กœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ํ•˜๋‚˜ ์ƒ์„ฑ๋  ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ ์ž˜ ์‹คํ–‰๋˜๋ฉด ๋œ ๊ฒƒ์ด๋‹ค.




์„œ๋ฒ„ ์‹คํ–‰

์ด์ œ ๊ฒ€์ƒ‰์—”์ง„ ์„œ๋ฒ„๋ฅผ ๋„์›Œ๋ณด์ž.
์•„๋ž˜์™€ ๊ฐ™์ด ๋งˆ์Šคํ„ฐํ‚ค๋ฅผ ์ฃผ์†Œ ์‹คํ–‰์‹œํ‚ค๋ฉด ์ •๋ง ๊ฐ„๋‹จํ•˜๊ฒŒ ๋œฌ๋‹ค. ํŒจ์Šค์›Œ๋“œ๋Š” 16๋ฐ”์ดํŠธ ์ด์ƒ์˜ ๋ฌธ์ž์—ด์ด๋ฉด ๋œ๋‹ค.

./meilisearch --master-key="ํŒจ์Šค์›Œ๋“œ..."

๊ทธ๋Ÿฌ๋ฉด open๋œ ํ˜ธ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์›น ์ฝ˜์†”์„ ํ™•์ธํ•  ์ˆ˜๋„ ์žˆ๊ณ ,

๊ทธ๋ƒฅ rest API๋ฅผ ์ด์„œ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.




๋ฐ์ดํ„ฐ ๊ธฐ๋ณธ๊ตฌ์กฐ

meilisearch๋„ elastic search์™€ ๋น„์Šทํ•œ ์Šคํ‚ค๋งˆ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅธ๋‹ค.
๋จผ์ € ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ธ๋ฑ์Šค๋Š” ์ผ์ข…์˜ ํ…Œ์ด๋ธ” ๋‹จ์œ„๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ธ๋ฑ์Šค์—๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ document๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. document ํ•˜๋‚˜ํ•˜๋‚˜๊ฐ€ ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ ํ–‰์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.
์ž์„ธํ•œ๊ฑด ๋ณ„๋„ ํฌ์ŠคํŠธ์—์„œ ์ƒ์„ธํžˆ ๋‹ค๋ฃจ๊ฒ ๋‹ค.




์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ ๋„ฃ์–ด๋ณด๊ธฐ

meilisearch์—์„œ ๊ณต์‹์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์ƒ˜ํ”Œ์„ ๋„ฃ์–ด์„œ ํ•œ๋ฒˆ ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ€๋Š”์ง€ ๋ณด๋„๋ก ํ•˜์ž.
์–ธ์–ด๋Š” nodejs๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค. json ๋ฐ์ดํ„ฐ ๊ธ์–ด์˜ค๊ณ  ์กฐํšŒํ•˜๊ธฐ๊ฐ€ ํŽธํ•ด์„œ ๊ณจ๋ž๋‹ค.

๋‹ค์šด๋กœ๋“œ => https://www.meilisearch.com/movies.json

์ด๋ ‡๊ฒŒ ์ƒ๊ฒจ๋จน์—ˆ๋‹ค.
๋ณต์žกํ•  ๊ฒƒ์€ ์—†๋‹ค. ๊ณ ์œ ๋ฒˆํ˜ธ๋กœ id๊ฐ€ ์žˆ๊ณ , ์ด๋ฏธ์ง€ ๋งํฌ์™€ ์ผ๋ฐ˜ ํ…์ŠคํŠธ, ์ •์ˆ˜ ํ•„๋“œ๊ฐ€ ์„ž์—ฌ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ€์–ด๋„ฃ์–ด์ค„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ž.
์šฐ์„  ๋‹ค์Œ ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•œ๋‹ค.

npm install meilisearch

์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

const { MeiliSearch } = require("meilisearch");
const movies = require("./movies.json");

async function main() {
  const client = new MeiliSearch({
    host: "http://localhost:7700",
    apiKey: "q1w2e3r4asdf",
  });

  await client.index("movies").addDocuments(movies);
  console.log("done");
}

main();

"movies"๋ผ๋Š” ์ธ๋ฑ์Šค์— ์ƒ˜ํ”Œ json ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ€์–ด๋„ฃ๊ฒ ๋‹ค๋Š” ์„ ์–ธ์ด๋‹ค.
์ธ๋ฑ์Šค๋Š” ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๊ณ , ์ธ๋ฑ์Šค ์Šคํ‚ค๋งˆ๋ฅผ ์ง์ ‘ ์ •์˜ํ•  ํ•„์š”๋„ ์—†๋‹ค. json ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ ์ž๋™์ƒ์„ฑํ•œ๋‹ค.

์ €๋Œ€๋กœ ์‹คํ–‰ํ•˜๊ณ 

์•ฝ๊ฐ„ ๊ธฐ๋‹ค๋ฆฌ๋ฉด

์ด๋ ‡๊ฒŒ ์›น ์ฝ˜์†”์—์„œ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•ด์งˆ ๊ฒƒ์ด๋‹ค.

๋ฐ”๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฒ€์ƒ‰๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋‚˜๋Š” ์ด๋ฏธ์ง€๋„ ์ธ์‹ํ•ด์„œ ์ž๋™์œผ๋กœ ์ธ๋„ค์ผ ๋„์›Œ์ฃผ๋Š”๊ฒŒ ๊ต‰์žฅํžˆ ์‹ ์„ ํ–ˆ๋‹ค.

์ฝ”๋“œ์—์„œ๋„ ๊ฐ„๋‹จํ•˜๊ฒŒ search๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
์•„๋ž˜ ์ฝ”๋“œ๋Š” ์›น ์ฝ˜์†”์—์„œ ๋ฐฉ๊ธˆ ํ–ˆ๋˜ ๊ฒƒ๊ณผ ์™„์ „ํ•˜๊ฒŒ ๋™์ผํ•˜๊ฒŒ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋‹ค.

const { MeiliSearch } = require("meilisearch");
const movies = require("./movies.json");

async function main() {
  const client = new MeiliSearch({
    host: "http://localhost:7700",
    apiKey: "q1w2e3r4asdf",
  });

  const result = await client.index("movies").search("kunhu"); // kunhu๋ผ๋Š” ํ‚ค์›Œ๋“œ๋กœ ๊ฒ€์ƒ‰
  console.log(result);
}

main();

๊ฒ€์ƒ‰ ์˜ต์…˜์„ ๋ณต์žกํ•˜๊ฒŒ ์ค„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ๊ทธ๋ƒฅ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ…์ŠคํŠธ๋งŒ ๋‚ ๋ ค์„œ ๊ฒ€์ƒ‰์„ ๋Œ๋ฆด ์ˆ˜๋„ ์žˆ๋‹ค.


๊ทธ๋Ÿฌ๋ฉด ์ž˜ ๋™์ž‘ํ•  ๊ฒƒ์ด๋‹ค.



์ฐธ์กฐ
https://www.meilisearch.com/docs/learn/getting_started/quick_start