์ด ๋ฌธ์๋ ๊ฒ์์ด ์๋์์ฑ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ ์ฌ์ฉ๋๋ Elasticsearch ์ ๋ต์ ์ค๋ช
ํฉ๋๋ค.
prefix
, edge_ngram
, completion
์ธ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์๊ณผ ๊ฐ๊ฐ์ ์ฅ๋จ์ , ์ค์ ๋ฐฉ๋ฒ์ ๋ค๋ฃน๋๋ค.
1. ๐ ์๋์์ฑ ๊ตฌํ ๋ฐฉ์ ๋น๊ต
๋ฐฉ์ | ์ฅ์ | ๋จ์ |
---|
prefix | ์ค์ ๊ฐ๋จ, ๊ธฐ๋ณธ ๊ธฐ๋ฅ | ๊ฒ์ ์ ํ๋ ๋ฎ์, ๋
ธ์ด์ฆ ๋ฐ์ |
edge_ngram | ๊ฒ์์ด ์กฐํฉ ๋ค์, ๋ถ๋ถ์ผ์น ๊ฐ๋ฅ | ์ธ๋ฑ์ค ์ฉ๋ ์ฆ๊ฐ, ํ๋ ํ์ |
completion | ์๋ ๋น ๋ฆ, ์ถ์ฒ์ด์ ์ ํฉ | ๊ธฐ๋ฅ ์ ํ, ์ค์ฝ์ด ์ปค์คํฐ๋ง์ด์ง ์ด๋ ค์ |
2. โ๏ธ prefix ์ฟผ๋ฆฌ ์์
{
"query": {
"prefix": {
"title": "์นด์นด"
}
}
}
- ์ฌ์ฉ์๊ฐ “์นด์นด” ์
๋ ฅ ์ “์นด์นด์ค”, “์นด์นด์”, “์นด์นดํธ” ๋ฑ ๋ฐํ
- ์ ํ๋๋ณด๋ค ๊ฐ๋จํ ์์ ๋จ์ด ๊ธฐ๋ฐ ๋งค์นญ์ ์ ํฉ
3. ๐งฑ edge_ngram ๊ธฐ๋ฐ ๋ถ์๊ธฐ ์ค์ ์์
๋งคํ ์ค์
{
"settings": {
"analysis": {
"tokenizer": {
"autocomplete_tokenizer": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 20,
"token_chars": ["letter", "digit"]
}
},
"analyzer": {
"autocomplete": {
"tokenizer": "autocomplete_tokenizer",
"filter": ["lowercase"]
},
"autocomplete_search": {
"tokenizer": "standard",
"filter": ["lowercase"]
}
}
}
},
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "autocomplete",
"search_analyzer": "autocomplete_search"
}
}
}
}
autocomplete_tokenizer
: edge_ngram
๊ธฐ๋ฐ์ผ๋ก ๋ถ๋ถ ํ ํฐ ์์ฑsearch_analyzer
: ํ์ค ๋ถ์๊ธฐ๋ก ๊ฒ์์ด ๊ทธ๋๋ก ์ฌ์ฉ
4. ๐ ๊ฒ์ ์ฟผ๋ฆฌ ์์ (edge_ngram)
{
"query": {
"match": {
"title": {
"query": "์นด์นด"
}
}
}
}
- ์ฌ์ฉ์๊ฐ
์นด์นด
๋ผ๊ณ ๊ฒ์ํ๋ฉด ์นด์นด์ค
, ์นด์นด์
, ์นด์นดXX
๋ชจ๋ ๊ฒ์ ๊ฐ๋ฅ - ํ ํฐํ ์์ (์นด์นด์ค):
์นด
, ์นด์นด
, ์นด์นด์ค
5. โก completion ํ๋ ์์
๋งคํ ์ค์
{
"mappings": {
"properties": {
"suggest": {
"type": "completion"
}
}
}
}
๊ฒ์ ์ฟผ๋ฆฌ
{
"suggest": {
"title-suggest": {
"prefix": "์นด์นด",
"completion": {
"field": "suggest"
}
}
}
}
- autocomplete์ ํนํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ๋น ๋ฅธ ์ถ์ฒ
- ๋จ์ : ์ผ๋ฐ์ ์ธ match ์ฟผ๋ฆฌ์ ํตํฉ ์ด๋ ค์
โ
์์ฝ ์ ๋ฆฌ
์ ๋ต | ์ค๋ช
|
---|
prefix | ๊ฐ๋จํ์ง๋ง ์ ํ๋ ๋ฎ๊ณ ์ ์ฐ์ฑ ๋ถ์กฑ |
edge_ngram | ๊ฐ๋ ฅํ ์๋์์ฑ ๊ตฌํ ๊ฐ๋ฅ, ์ธ๋ฑ์ค ์ฉ๋ ์ฆ๊ฐ ์ฃผ์ |
completion | ๋น ๋ฅธ ์ถ์ฒ ์์คํ
์ ์ ํฉ, ๊ธฐ๋ฅ ์ ํ ์์ |