์ด์ ํฌ์คํ ์ ์ด์ด ์ด๋ฒ์๋ Index Template์ ๋ ๋ฒ์งธ ์ฃผ์ ๊ตฌ์ฑ์ธ Mapping ์์ญ์ ์ดํด๋ณด๋๋ก ํ๊ฒ ๋ค.
Mapping์ (๋ด๊ฐ ์ดํดํ๊ธฐ๋ก๋) Database์ Column์ ์์ฑํ๋ ๊ฒ๊ณผ ๋น์ทํ๋ค๊ณ ๋ณผ ์ ์๋ค. ๋ค๋ง Elasticsearch๋ ์ญ์์ธ์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์, Multi-Field๋ฅผ ์ฌ์ฉํด์ ํ๋์ Column์ ๋ํด์ ์ฌ๋ฌ ๊ฐ์ง์ ์ธ๋ฑ์ฑ ๋ฐฉ๋ฒ, analyzer๋ฅผ ๋์ ํ ์ ์๋ค๋ ์ฐจ์ด์ ์ด ์๋ค.
Mapped Field๋ฅผ ์ ์ธํ๊ณ Runtime Field๋ Dynamic templates์ ๋ํด์๋ ๋ ๊ณต๋ถ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์(...) ์ฌ๊ธฐ์ ๋ค๋ฃจ์ง๋ ์๊ฒ ๋ค. ์์ฃผ ๊ธฐ์ด์ ์ธ Mapping๋ง ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ๋ค.
1. ์์ ๋ฐ์ดํฐ
์์ ๋ก ์ธ ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ๋ค. ์ด ๋ค์ฏ ๊ฐ์ column์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๊ฐ๋จํ ๊ธ์ ํฌํจ๋๋ ๋ฐ์ดํฐ๋ค์ด๋ค. ๋ฐ์ดํฐ ํ์ ๊ณผ ๋ชฉ์ ์ ๋ค์๊ณผ ๊ฐ๋ค. FastAPI์์ SQLAlchemy ์ฐ๊ฒฐ์ ์ํด ์์ฑํ ์ฝ๋์ด๋ค.
- id : post id(Integer)
- time : ๋ฐํ ์๊ฐ(Datetime)
- title : ๊ธ ์ ๋ชฉ(String/Text)
- content : ๊ธ ๋ด์ฉ(String/Text)
- writer : ์์ฑ์(String/Text)
2. Elasticsearch Mapping ๊ตฌ์ฑํ๊ธฐ
kibana์์ ์ด์ ํฌ์คํ ์ ๊ทธ ํ๋ฉด, index management - index template์์ mapping ๋ถ๋ถ์ ์์ ํด์ฃผ๋ฉด ๋๋ค.
์ฐ์ Database์์ ์ ์ํ Column ์ ํ์ ๋๋ก Field๋ฅผ ์์ฑํด์ค๋ค. Integer์ Numeric - Long์ผ๋ก ์ ํํด์ฃผ๋ฉด ๋๋ค.
์ ํํ๋ฉด์ ๋ณผ ์ ์์๋ค์ํผ ์์ฒญ๋๊ฒ ๋ง์ type๋ค์ ์ง์ํ๊ณ ์๋ค. multi-field๋ฅผ ์์ฑํ๊ธฐ ์ ์ Text ํ์ ํ๋์ ๋ํด์ analyzer๋ฅผ ์ปค์คํ ํด๋ณด๋๋ก ํ๊ฒ ๋ค. ์ ์ฐํ๋ชจ์์ ๋๋ฅด๊ณ , Show Advanced settings ๋ฒํผ์ ๋๋ฅด๋ฉด ์ด๋ฐ ์ฐฝ์ด ์ฌ์ด๋์์ ๋์จ๋ค.
Analyzer ์์ญ์ Index and search analyzer๊ฐ ๋์ ๋๋ค. Default๋ ์์ธ์ฉ analyzer์ ๋์ค์ ๊ฒ์ํ ๋ ๊ฒ์์ด ์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ analyzer ๋ฅผ ๋์ผํ๊ฒ ์ฒ๋ฆฌํด์ฃผ๋ ๊ฒ์ด๋ค. ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ณ ์ถ๋ค๋ฉด ์ ์ฒดํฌ๋ฅผ ํ๊ณ ๋ฐ๋ก ์ค์ ํด๋ ๋๋ค.
analyzer๋ฅผ custom analyzer๋ก ์ค์ ํ๋ฉด Settings ์์ ์ค์ ํด๋์๋ whitespace_analyzer์ nori_analyzer๊ฐ ์๋ค.
์ด๋ ๊ฒ setting์์ ์ปค์คํ ํ analyzer๋ฅผ ์ ํํ๊ฑฐ๋, ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ๋ค๋ฅธ analyzer๋ฅผ ๊ณจ๋ผ์ฃผ๋ฉด ๋๋ค. ๋๋ ์ฐ์ title๊ณผ content ํ๋์ nori_analyzer๋ฅผ ์ ์ฉํ๋ค.
3. Elasticsearch Multi-Field(Search as you type)
๋ง์ ๋ถ๋ค์ด ์ด ๊ธ์ ๋ณด๊ณ ์๋ ์ด์ ๋ ๋์ ํ๋ฅ ๋ก ๊ฒ์์์ง ์ ์ฉ์ ์ํ ๊ฒ์ผ ๋ฏ ํ๋ฐ, ๊ทธ ๋ชฉ์ ์ ๋ฑ ์๋ง์ type์ด ์๋ค. ๋ฐ๋ก Search as you type์ด๋ค.
์ด๋ฆ๋ง์ ์ด์ํ ์ด ํ์ ์ Text์ ๋ํด์ ์์์! 2-gram, 3-gram, pharse prefix๊น์ง ์ํํด์ ๊ฒ์์ ์ฉ์ดํ๊ฒ ๋์์ค๋ค. ์ด๋ฅผํ ๋ฉด ์ด๋ฐ ๊ฒ์ด๋ค.
Hello my name is Dnai.
๋ผ๋ ๋ฌธ์ฅ์ด ์์ผ๋ฉด, Search-as-you-type์ ์๋์ ๊ฐ์ด ์ฌ๋ฌ ๋ฐฉ๋ฒ์ผ๋ก ์์ธ์ ํด์ค๋ค.
- 2-gram = Hello my / my name / name is / is Dnai
- 3-gram = Hello my name / my name is / name is Dnai
- pharse prefix = H / He / Hel / Hell / Hello ...
๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ๋ ์ผ๋ถ๋ง ์จ๋ ์ฐฐ๋ก๊ฐ์ด ์ฐพ์์ค ์ ์๋ค. ์์ฃผ ํธ๋ฆฌํ ๊ธฐ๋ฅ์ด๋ผ๊ณ ํ ์ ์๊ฒ ๋ค. ๋ฐ๋ผ์ ์ด๊ฑธ ๊ธฐ์ค์ผ๋ก title๊ณผ content์ multi-field๋ฅผ ๋ง๋ค์ด์ค ๊ฒ์ด๋ค. ๋๊ฐ๋ด๋ ๋ณต์ฌ์ธ ๊ฒ ๊ฐ์ ์์ด์ฝ์ ๋๋ฌ๋ณด์.
Field name์ title.OOO๋ก ์์ฑ๋๊ธฐ ๋๋ฌธ์ ์ ๋นํ ๋ถ์ด๋ฉด ๋๋ค. ๋๋ search๋ก ์์ฑํ๋ค.
์ด๋ ๊ฒ ๋๋ฉด Query๋ฌธ์ ์์ฑํ ๋ title.search field์์ ๋ญ๋ญ๋ฅผ ์ฐพ์์ค! ๋ผ๊ณ ์์ฒญ์ ๋ณด๋ผ ์ ์๊ฒ ๋๋ค. Search-as-you-type์ผ๋ก ์ค์ ์ ํด์ฃผ๊ณ Advanced Setting์์ ๋๊ฐ์ด analyzer๋ฅผ ์ ํํ ์ ์๋ค. ๋๋ ์ปค์คํ ์์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋ Whitespace_analyzer๋ฅผ ์ ํํด์ฃผ์๋ค.
์ง ! ์ด๋ ๊ฒ ํ๋ฉด ๋งคํ ๋์ด๋ค. Aliases๋ Component Templates์ ๊ฐ์ ์ฌ์ ๋ก ๋์ด๊ฐ๋๋ก ํ๊ฒ ๋ค. ๋ง์ง๋ง ๋จ๊ณ์์ preview ํญ์ ๋ณด๋ฉด ์ด๋ค ๋ฐฉ์์ผ๋ก Setting๊ณผ Mapping์ด ์ด๋ฃจ์ด์ก๋์ง ํ์ธํด๋ณผ ์ ์๋ค.
์ค์ํ ์ ์ logstash๋ฅผ ํตํด์ dbms์ ์ฐ๋ํ๊ณ ์ถ๋ค๋ฉด table ํ๋ ๋น index ํ๋์ด๋ฏ๋ก mapping์ ํ ๋ ํด๋นํ๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ ํ์ ์ ์ฐฐ๋ก๊ฐ์ด ๋ง์ถฐ์ฃผ๋ ๊ฒ์ด ์ค์ํ๋ค. Field ์ด๋ฆ๋!!!!!
์ฌ๊ธฐ๊น์ง ํ๊ณ , ๊ฒ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ํฌ์คํ ์ Personal Home ํ๋ก์ ํธ ์นดํ ๊ณ ๋ฆฌ์ ์ฌ๋ ค๋ณด๋๋ก ํ๊ฒ ๋ค.
+) ์๋ชป๋ ์ ์ด๋ ๋นํจ์จ์ ์ด๋ผ๊ณ ํ๋จ๋๋ ๋ถ๋ถ์ ๋๊ธ๋ก ๊ฐ๋ฅด์ณ์ฃผ์๋ฉด ๊ฐ์ฌํ ๋ฐฐ์ฐ๊ฒ ์ต๋๋ค(_ _) ์งํ ์ค ๋ฌธ์ ๊ฐ ์๊ธฐ์ จ๋ค๋ฉด ๊ทธ๊ฒ๋ ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์!
'๐ฅ Web > โ Back-end | etc.' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[etc] Logout ํ ๋ค๋ก ๊ฐ๊ธฐ ๋ฐฉ์ง - BF Cache (0) | 2024.02.23 |
---|---|
[PostgreSQL] Windows ์ธ๋ถ ์ ์ ํ์ฉ ์ค์ ๋ฐ ์ธ๋ถ ์ ์ ๋ฐฉ๋ฒ (1) | 2023.11.03 |
[Elasticsearch] Index Template ๊ตฌ์ฑํ๊ธฐ with Kibana & Logstash (1) - Setting (0) | 2023.07.06 |
[Elasticsearch] Logstash๋ฅผ ํตํด PostgreSQL๊ณผ Elastic Stack ์ฐ๋ํ๊ธฐ (0) | 2023.06.29 |
[Elasticsearch] Logstash ์ฌ์ฉํด๋ณด๊ธฐ (0) | 2023.06.29 |