Firebase ๋ถ๋ถ ๋ฌธ์ ๊ฒ์๊ธฐ๋ฅ ๊ตฌํ
โ๏ธfirebase store์์๋ ๋ถ๋ถ ํ ์คํธ ๊ฒ์์ ์ง์ํ์ง ์๋๋ค.
ex) ๊ท์ฌ์ด ํธ๋๋ผ๋ ์ ์ ๋ฅผ ๊ฒ์ํ๊ธฐ ์ํด์, ํธ๋๋ผ๊ณ ๊ฒ์ํ๋ฉด ์ฟผ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค. ์ ๋์ด๊ฐ ์ผ์นํ๋๋ก ์ ๋ ฅํด์ผ ์ฐพ๊ณ ์ํ๋ ์ ์ ๋ฅผ ๊ฒ์ํ ์ ์๋ค
์ด์ ๊ฐ์ ์ํฉ์ด๋ผ๋ฉด, ๊ฒ์๊ธฐ๋ฅ์ ํฐ ์๋ฏธ๊ฐ ์๋๊ฒ ๊ฐ์ ๋ถ๋ถ ๋ฌธ์์ด๋ก ๊ฒ์์ด ๊ฐ๋ฅํ๋๋ก ํด๊ฒฐํด๋ณด๊ณ ์ ํ๋ค.
export const cleaningText = (text: string): string => {
// ํน์๋ฌธ์ ๋ฐ ๊ณต๋ฐฑ ์ ๊ฑฐ, ๋ค์ํ ์ธ์ด ์ง์
const regEx = /[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/ ]/gim;
const cleanText = text.replace(regEx, "").toLowerCase();
return cleanText;
};
const q = query(
userRef,
where("cleanedNickname", ">=", cleanedNickname),
where("cleanedNickname", "<=", cleanedNickname + "\uf8ff")
);
์ฒ์ ์ฌ์ฉํ ๋ฐฉ์์, ๋์๋ฌธ์ ๊ตฌ๋ถ๊ณผ ๊ณต๋ฐฑ์ ์ ๊ฑฐํ cleanedNickname ์ ์ ์ฉํ๊ณ , ์ด์ฒ๋ผ ์ฟผ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํด์ฃผ์๋ค.
๐๐ป ์ด ๋ฐฉ์์ ํด๋น searchTerm์ผ๋ก ๋๋๋ ๋ฌธ์์ด์ ๊ฒ์์ด ๋ถ๊ฐ๋ฅํจ ์์ํ๋ ๋ฌธ์์ด์์๋ง ๊ฐ๋ฅํ๋ค.
๊ฒ์ ํค์๋ ์กฐํฉ ์์ฑ
import { cleaningText } from "./cleaningText";
export const createKeyWords = (texts: string[]) => {
const keywords = new Set<string>();
texts.forEach((text) => {
const cleanText = cleaningText(text);
const length = cleanText.length;
// ๋ชจ๋ ๊ฐ๋ฅํ 2๊ธ์ ์ด์, 10๊ธ์ ์ดํ์ ๋ถ๋ถ ๋ฌธ์์ด์ ์์ฑ
for (let i = 0; i < length; i++) {
let temp = "";
for (let j = i; j < length && j < i + 10; j++) {
temp += cleanText[j];
if (temp.length >= 2) {
keywords.add(temp);
}
}
}
return Array.from(keywords);
});
};
์ ๊ท์์ผ๋ก ํ๋ฒ text๋ฅผ (๋์๋ฌธ์ ๊ตฌ๋ถx, ๊ณต๋ฐฑ์ ๊ฑฐ)๊ฑธ๋ฌ์ ๋ง๋ค์ด์ฃผ๊ณ , ์ด ํ ์คํธ๋ก ํค์๋๋ฅผ ์์ฑํ๋ค.
๐๐ป ๋ฏธ๋ฆฌ ๊ฐ๋ฅํ ๋ชจ๋ ํค์๋์ ์กฐํฉ์ ๋ง๋ค์ด Array์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉ
firebase์ ์ฟผ๋ฆฌ์กฐ๊ฑด ์ค ํ๋๋ก, ํน์ ํ๋์ ์ง์ ๋ ๋ฐฐ์ด์ค ํ๋๋ผ๋ ํฌํจ๋์ด ์๋์ง ๊ฒ์ฌํด์ค๋ค. ์ด๋ฅผ ํตํด, ๋ค์ค๊ฐ์ ํฌํจํ๋ ๋ฐฐ์ด์ ๋์์ผ๋ก ์ ์ฐํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์์๋ค.
const q = query(postRef, where("keywords", "array-contains-any", keywords));
๐๐ป ๋ง๋ค์ด๋์ ์ฌ๋ฌ์กฐํฉ์ keywords๋ฅผ ์ฟผ๋ฆฌํจ
์ด์ ์ฐพ๊ณ ์ํ๋ ํค์๋๋ฅผ ํฌํจํ๋ค๋ฉด ๊ฒ์๊ฒฐ๊ณผ์์ ์ฐพ์ ์ ์๊ฒ๋์๋ค.
๐ค ์๊ฐ์น๋ ๋ชปํ๊ฒ, firebase๊ฐ ๋ถ๋ถ๋ฌธ์ ๊ฒ์์ ์ง์ํด์ฃผ์ง ์์ ์ด๋ ๊ฒ ๊ตฌํํด๋ณด๊ฒ ๋์๋๋ฐ, ์ด๋ฐ์์ผ๋ก ํค์๋๋ค์ ์ ์ ์ ๊ฒ์๋ฌผ๋ง๋ค ์์ฑํ๊ณ DB์ ์ ์ฅ์ ํ๋๊ฒ์ด ํนํ๋, ์๋น์ค์ ๊ท๋ชจ๊ฐ ์ปค์ง๋ค๋ฉด ๋นํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ด ๋ ๊ฒ์ด๋ค. ์ธ๋ถ ๋ค๋ฅธ Algolia๋ Elastic ๊ฐ์ ๊ฒ์ ์์ง API๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์๋ ์๋ค๊ณ ํ๋, ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ ๊ณ ๋ คํด๋ณด์์ผ ํ ๊ฒ ๊ฐ๋ค.