kohigowild
ํ์ด์ด๋ฒ ์ด์ค๋ก ํค์๋ ๊ฒ์ ๊ตฌํํ๊ธฐ ๋ณธ๋ฌธ
๐ผ ํ์ฌ ํ์ด์ด์คํ ์ด์์๋ ์ ์ฒด ํ ์คํธ ๊ฒ์์ ์ง์ํ์ง ์๋๋ค. ํ์ด์ด๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด์ ๊ฒ์์ ๊ตฌํํ๊ธฐ ์ํด์๋ ์ฟผ๋ฆฌ๋ฌธ์ ๋ณํํด์ ์ฌ์ฉํ๊ฑฐ๋ ํ์ฌ ์๋ฃจ์ ์ธ Algolia๋ Elastic ๊ฐ์ ๊ฒ์ ์์ง API๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
ํ์ด์ด๋ฒ ์ด์ค์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ผ๋ก๋ง ํค์๋ ๊ฒ์์ ๊ตฌํํ๊ธฐ ์ํด ์ฟผ๋ฆฌ๋ฌธ์ ์ฌ์ฉํด ๋ณด์.
๐๏ธ ๊ธฐ์กด ์ฝ๋์ ๋ฌธ์ ์
const q = query(collection(db, 'feed'), where('address', '>=', keyword), where('address', '<=', keyword + '\uf8ff'));
const querySnapshot = await getDocs(q);
setState(
querySnapshot.docs.map((doc) => ({
...doc.data(),
})),
);
- ํด๋น ์ฟผ๋ฆฌ๋ฌธ์ ๋ฌด์กฐ๊ฑด prefix ๊ฒ์๋ง ๊ฐ๋ฅํ๋ค.
- address๊ฐ ์ ๋ผ๋จ๋ ์ฌ์์์ธ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ “์ ๋ผ๋จ๋” ํน์ “์ ๋ผ๋จ๋ ์ฌ์์” ๋ก ๊ฒ์ํ๋ฉด ์กฐํ๊ฐ ๊ฐ๋ฅํ๋ฐ, “์ฌ์์” ๋ก๋ ๊ฒ์ํ ์ ์๋ค.
๐๏ธ ๊ทธ๋์ ์ด๋ป๊ฒ ํ๋
refer
https://medium.com/@ken11zer01/firebase-firestore-text-search-and-pagination-91a0df8131ef
1. ๊ฒ์ ๋์์ด ๋๋ ์์ธ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด์ keyword ํ๋์ ๋ฐ๋ก ์ ์ฅํ๋ค. ํด๋น ํ๋ก์ ํธ์์๋ ๊ฒ์ ๋์์ด ๋๋ ํ๋ ๊ฐ์ธ address, addressDetail์ ๋์ด์ฐ๊ธฐ ๋จ์๋ก ์ชผ๊ฐ ํด๋น ๊ฐ์ ๊ฐ์ง๊ณ ์๋ ๋ชจ๋ ๋ฌธ์์ ์์ธ์ ์ถ๊ฐํ๋ค.
useEffect(() => {
setKeyword(address.split(' '));
{
addressDetail && setKeyword((prev) => [...prev, addressDetail]);
}
}, [address, addressDetail]);
2. ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ array-contains ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ค. 1๋ฒ์์ ์ถ๊ฐํ keyword ํ๋์ ๋ฐฐ์ด์ ํค์๋๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ๊ฐ์ ๋ชจ๋ ๋ถ๋ฌ์จ๋ค.
export const searchFeedList = async (keyword: string, setState: any) => {
const q = query(collection(db, 'feed'), where('keyword', 'array-contains', keyword));
const querySnapshot = await getDocs(q);
setState(
querySnapshot.docs.map((doc) => ({
...doc.data(),
})),
);
};
๐๏ธ ํ์ฌ ์ฝ๋์ ๋ฌธ์ ์
- ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค ๋ ๋ํ
์ผํ๊ฒ ๊ฐ์ ์ ๋ฌํ์ง ์๊ธฐ ๋๋ฌธ์ -postcode๋ก ๋ฐ์ ์ฃผ์๋ฅผ ๋์ด์ฐ๊ธฐ ๋จ์๋ก ์ชผ๊ฐ ๊ฑฐ + ์ ์ ๊ฐ ์
๋ ฅํ ์์ธ ์ฃผ์ ๋จ์๋ก ์ ์ฅ- ์์ ํ ๊ฒ์์ด ๋ถ๊ฐ๋ฅํ๋ค.
- ์ฌ์ ์ ๋จ ์ฌ์์ ๋จ
- ์ ๋จ ์ ๋จ ์ ๋ผ๋จ๋ ๋จ
- ์์ ์ ์๋ ๋์๋ ์ ๋ผ๋จ๋ ์ฌ์์๋ ์ ๋จใ ใ ใ ใ
- ํค์๋๋ฅผ ์ด๋ป๊ฒ ๋ํ ์ผํ๊ฒ ๋ฝ๊ฐ์ ์ ์ฅํ ๊ฒ์ธ๊ฐ๋ฅผ ํด๊ฒฐํ๋ค๋ฉด ์คํ๋ ค ๊ฒ์ ๊ธฐ๋ฅ์ ์์ฑ๋๊ฐ ๋์์ง ์ ์๋ ์ฝ๋๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ ์๋ฏธํ ๋ณํ๋ผ๊ณ ์๊ฐํ๋ค.
'mitmitwiki' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
REST API๊ฐ ๋จผ๋ฐ์... (0) | 2023.04.11 |
---|---|
ํ์ด์ด๋ฒ ์ด์ค๋ก ๋ฌดํ ์คํฌ๋กค ๊ตฌํํ๊ธฐ (1) | 2023.04.08 |
Proxy ๊ทธ๊ฒ ๋ชฌ๋ฐ ์ด๋ก์ผ ํ๋ ๊ฑด๋ฐ (Vite Proxy ์ค์ ) (0) | 2023.04.02 |
axios interceptors๋ก 401 error ์ฒ๋ฆฌ (0) | 2023.04.02 |
PWA ์ ์ฉ ๋์ ใฑใ ฃ...! (0) | 2023.04.02 |