Elastic - Settings & Mappings
๐Ÿ™ˆ

Elastic - Settings & Mappings

Created
May 10, 2024 03:31 AM
Last edited time
Last updated May 10, 2024
Tags
ElasticSearch
Language
URL

Intro::

์ธ๋ฑ์Šค์˜ ๋‹จ์œ„์—์„œ ์ด๋ฃจ์–ด์ง€๋Š” ์„ค์ •๋“ค๊ณผ ๋ฐ์ดํ„ฐ ๋ช…์„ธ์ธ ์ธ๋ฑ์Šค ๋งคํ•‘์— ๋Œ€ํ•ด ์•Œ์•„๋ด…์‹œ๋‹ค.

Settings

๐Ÿ’ก
์ธ๋ฑ์Šค๋ฅผ ์ฒ˜์Œ ์ƒ์„ฑํ•œ ๋’ค GET <์ธ๋ฑ์Šค๋ช…> ์œผ๋กœ ์กฐํšŒํ•˜๋ฉด settings์™€ mappings ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GET my_index/_settings ๋‚˜ GET my_index/_mappings๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ย 

number_of_shards, number_of_replicas

๐Ÿ’ก
ํ”„๋ผ์ด๋จธ๋ฆฌ ์ƒค๋“œ ์ˆ˜์™€ ๋ ˆํ”Œ๋ฆฌ์นด๋Š” number_of_shards, number_of_replicas์—์„œ ์„ค์ •์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์„ค์ •๋“ค์€ settins ์•„๋ž˜์˜ index ์•„๋ž˜ ์„ค์ •์— ๋ช…์‹œ๋˜๋Š”๋ฐ index ๋ ˆ๋ฒจ์€ ์ƒ๋žตํ•˜๊ณ  ์ž…๋ ฅํ•˜์—ฌ๋„ ์ •์ƒ ์ž…๋ ฅ์ด ๋ฉ๋‹ˆ๋‹ค.
// my_index ์ธ๋ฑ์Šค ์ƒ์„ฑ - ๊ด„ํ˜ธ { } ์•ˆ์— ํ•˜์œ„ ๊ฐ’ ์ง€์ • PUT my_index { "settings": { "index": { "number_of_shards": 3, "number_of_replicas": 1 } } } // my_index ์ธ๋ฑ์Šค ์ƒ์„ฑ - ๋งˆ์นจํ‘œ . ์œผ๋กœ ํ•˜์œ„ ๊ฐ’ ์ง€์ • PUT my_index { "settings": { "index.number_of_shards": 3, "index.number_of_replicas": 1 } } // my_index ์ธ๋ฑ์Šค ์ƒ์„ฑ - index ์ƒ๋žต PUT my_index { "settings": { "number_of_shards": 3, "number_of_replicas": 1 } }
  • number_of_shard
    • ์ฒ˜์Œ ์ƒ์„ฑ ํ›„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค.
    • shrink API ํ˜น์€ split API๋ฅผ ์ด์šฉํ•ด์„œ ์ƒค๋“œ ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•˜์ง€๋งŒ ์ธ๋ฑ์Šค๋ฅผ closeํ•ด์•ผ ํ•˜๊ณ , ํŒŒ์ผ ์žฌ๋ฐฐ์น˜ํ•˜๋Š” ์ž‘์—…์„ ํ•˜๋Š” ๋ณต์žกํ•œ ๊ณผ์ •์ด๊ธฐ์— ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • number_of_replicas
    • ๋‹ค์ด๋‚˜๋ฏนํ•˜๊ฒŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • // my_index ์ธ๋ฑ์Šค์˜ number_of_replicas ๊ฐ’ ๋ณ€๊ฒฝ PUT my_index/_settings { "number_of_replicas": 2 }
ย 

refresh_interval

๐Ÿ’ก
Elasticsearch ์—์„œ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๋ฆฌํ”„๋ ˆ์‹œ ํƒ€์ž„์„ ์„ค์ •ํ•˜๋Š” ๊ฐ’์ธ๋ฐ ๊ธฐ๋ณธ์€ 1์ดˆ(1s) ์ž…๋‹ˆ๋‹ค. number_of_replicas์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‹ค์ด๋‚˜๋ฏน ์„ค์ •์ž…๋‹ˆ๋‹ค.
PUT my_index { "settings": { "refresh_interval": "30s" } }
ย 

analyzer, tokenizer, filter

PUT my_index { "settings": { "analysis": { "analyzer": { "my_analyzer": { "type": "custom", "char_flter": [ "...", "..." ... ] "tokenizer": "...", "filter": [ "...", "..." ... ] } }, "char_filter":{ "my_char_filter":{ "type": "โ€ฆ" ... } } "tokenizer": { "my_tokenizer":{ "type": "โ€ฆ" ... } }, "filter": { "my_token_filter": { "type": "โ€ฆ" ... } } } } }
ย 

๋งคํ•‘ - Mappings

๋™์ (Dynamic) ๋งคํ•‘

๐Ÿ’ก
Elasticsearch๋Š” ๋™์  ๋งคํ•‘์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ์ •์˜ํ•˜์ง€ ์•Š์•„๋„ ์ธ๋ฑ์Šค์— ๋„ํ๋จผํŠธ๋ฅผ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋งคํ•‘์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
์˜ˆ์‹œ๋กœ ์ธ๋ฑ์Šค๊ฐ€ ์—†๋Š” ์ƒํƒœ์—์„œ ๋„ํ๋จผํŠธ๋ฅผ ์ธ๋ฑ์Šค์— ์ž…๋ ฅํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋งคํ•‘์ด ๋ฉ๋‹ˆ๋‹ค.
// books ์ธ๋ฑ์Šค๊ฐ€ ์—†๋Š” ์ƒํƒœ์—์„œ ๋„ํ๋จผํŠธ ์ž…๋ ฅ PUT books/_doc/1 { "title": "Romeo and Juliet", "author": "William Shakespeare", "category": "Tragedies", "publish_date": "1562-12-01T00:00:00", "pages": 125 }
// books ์ธ๋ฑ์Šค์˜ ๋งคํ•‘ ํ™•์ธ GET books/_mapping
// books ์ธ๋ฑ์Šค์˜ ๋งคํ•‘ ํ™•์ธ ๊ฒฐ๊ณผ { "books" : { "mappings" : { "properties" : { "author" : {// ํ•„๋“œ๊ฐ’ "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "category" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } }, "pages" : { "type" : "long" }, "publish_date" : { "type" : "date" }, "title" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword", "ignore_above" : 256 } } } } } } }
๐Ÿ’ก
๊ฐ ํ•„๋“œ๊ฐ’์—์„œ ๊ฒฐ๊ตญ์— ํ…€์„ ๊ฒ€์ƒ‰ํ•ด ๋‚˜์•„๊ฐ„๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.
ย 

๋งคํ•‘ ์ •์˜

// ์ƒˆ๋กœ์šด ์ธ๋ฑ์Šค ์„ค์ • PUT <์ธ๋ฑ์Šค๋ช…> { "mappings": { "properties": { "<ํ•„๋“œ๋ช…>":{ "type": "<ํ•„๋“œ ํƒ€์ž…>" โ€ฆ <ํ•„๋“œ ์„ค์ •> } โ€ฆ } } } // ๊ธฐ์กด ๋งคํ•‘์— ํ•„๋“œ ์ถ”๊ฐ€ PUT <์ธ๋ฑ์Šค๋ช…>/_mapping { "properties": { "<์ถ”๊ฐ€ํ•  ํ•„๋“œ๋ช…>": {// ๊ธฐ์กด ํ•„๋“œ๋ช…๊ณผ ์ค‘๋ณต๋œ๋‹ค๋ฉด ์˜ค๋ฅ˜ ๋ฐœ์ƒ "type": "<ํ•„๋“œ ํƒ€์ž…>" โ€ฆ <ํ•„๋“œ ์„ค์ •> } } }
๐Ÿ’ก
์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ๋งคํ•‘์— ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ํ•„๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ํ•„๋“œ์˜ ํƒ€์ž… ๋ฐ ์„ค์ •๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค. ํ•„๋“œ์˜ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ธ๋ฑ์Šค๋ฅผ ์ƒˆ๋กœ ์ •์˜ํ•˜๊ณ  ๊ธฐ์กด ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ์ƒˆ ์ธ๋ฑ์Šค์— ๋ชจ๋‘ ์žฌ ์ƒ‰์ธ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๐Ÿ’ก
์ธ๋ฑ์Šค์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋  ๋•Œ ๊ธฐ์กด ๋งคํ•‘์— ์—†๋Š” ํ•„๋“œ๊ฐ’์ด๋ผ๋ฉด ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
ย 

๋ฌธ์ž์—ด - text, keyword

๐Ÿ’ก
Elasticsearch์—์„œ ์„ ์–ธ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž์—ด ํƒ€์ž…์—๋Š” text, keyword ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

text

๐Ÿ’ก
์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ํ…€ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์–ด ์—ญ ์ƒ‰์ธ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํ’€ํ…์ŠคํŠธ ๊ฒ€์ƒ‰์— ์‚ฌ์šฉํ•  ๋ฌธ์ž์—ด ํ•„๋“œ๋“ค์„ textํƒ€์ž…์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • "analyzer" : "<์• ๋„๋ผ์ด์ €๋ช…>" - ์ƒ‰์ธ์— ์‚ฌ์šฉํ•  ์• ๋„๋ผ์ด์ €๋ฅผ ์ž…๋ ฅํ•˜๋ฉฐ ๋””ํดํŠธ๋กœ๋Š” standard ์• ๋„๋ผ์ด์ €๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ† ํฌ๋‚˜์ด์ €, ํ† ํฐํ•„ํ„ฐ๋“ค์„ ๋”ฐ๋กœ ์ง€์ •ํ• ์ˆ˜๊ฐ€ ์—†์œผ๋ฉฐ ํ•„์š”ํ•˜๋‹ค๋ฉด ์‚ฌ์šฉ์ž ์ •์˜ ์• ๋„๋ผ์ด์ €๋ฅผ settings์— ์ •์˜ ํ•ด ๋‘๊ณ  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • "search_analyzer" : "<์• ๋„๋ผ์ด์ €๋ช…>" - ๊ธฐ๋ณธ์ ์œผ๋กœ text ํ•„๋“œ๋Š” match ์ฟผ๋ฆฌ๋กœ ๊ฒ€์ƒ‰์„ ํ•  ๋•Œ ์ƒ‰์ธ์— ์‚ฌ์šฉํ•œ ๋™์ผํ•œ ์• ๋„๋ผ์ด์ €๋กœ ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ๋ฅผ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. search_analyzer ๋ฅผ ์ง€์ •ํ•˜๋ฉด ๊ฒ€์ƒ‰์‹œ์—๋Š” ์ƒ‰์ธ์— ์‚ฌ์šฉํ•œ ์• ๋„๋ผ์ด์ €๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์• ๋„๋ผ์ด์ €๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต NGram ๋ฐฉ์‹์œผ๋กœ ์ƒ‰์ธ์„ ํ–ˆ์„ ๋•Œ๋Š” ์ง€์ • ํ•ด ์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค.
  • "index" : <true | false> - ๋””ํดํŠธ๋Š” true ์ž…๋‹ˆ๋‹ค. false๋กœ ์„ค์ •ํ•˜๋ฉด ํ•ด๋‹น ํ•„๋“œ๋Š” ์—ญ ์ƒ‰์ธ์„ ๋งŒ๋“ค์ง€ ์•Š์•„ ๊ฒ€์ƒ‰์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • "boost" : <์ˆซ์ž ๊ฐ’> - ๋””ํดํŠธ๋Š” 1 ์ž…๋‹ˆ๋‹ค. ๊ฐ’์ด 1 ๋ณด๋‹ค ๋†’์œผ๋ฉด ํ’€ํ…์ŠคํŠธ ๊ฒ€์ƒ‰ ์‹œ ํ•ด๋‹น ํ•„๋“œ ์Šค์ฝ”์–ด ์ ์ˆ˜์— ๊ฐ€์ค‘์น˜๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. 1๋ณด๋‹ค ๋‚ฎ์€ ๊ฐ’์„ ์ž…๋ ฅํ•˜๋ฉด ๊ฐ€์ค‘์น˜๊ฐ€ ๋‚ด๋ ค๊ฐ‘๋‹ˆ๋‹ค.
  • "fielddata" : <true | false> - ๋””ํดํŠธ๋Š” false ์ž…๋‹ˆ๋‹ค. true๋กœ ์„ค์ •ํ•˜๋ฉด ํ•ด๋‹น ํ•„๋“œ์˜ ์ƒ‰์ธ๋œ ํ…€ ๋“ค์„ ๊ฐ€์ง€๊ณ  ์ง‘๊ณ„(aggregation) ๋˜๋Š” ์ •๋ ฌ(sorting)์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ค์ •์€ ๋‹ค์ด๋‚˜๋ฏน ์„ค์ •์œผ๋กœ ์ด๋ฏธ ์ •์˜๋œ ๋งคํ•‘์— true ๋˜๋Š” false๋กœ ๋‹ค์‹œ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

keyword

๐Ÿ’ก
์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ํ•˜๋‚˜์˜ ํ† ํฐ์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. textํƒ€์ž…์— keyword ์• ๋„๋ผ์ด์ €๋ฅผ ์ ์šฉํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ง‘๊ณ„(aggregation) ๋˜๋Š” ์ •๋ ฌ(sorting)์— ์‚ฌ์šฉํ•  ๋ฌธ์ž์—ด ํ•„๋“œ๋ฅผ keyword ํƒ€์ž…์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • index, boost ์„ค์ •์€ text ํ•„๋“œ์™€ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • "doc_values" : <true | false> - ๋””ํดํŠธ๋Š” true ์ž…๋‹ˆ๋‹ค. keyword ๊ฐ’๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง‘๊ณ„๋‚˜ ์ •๋ ฌ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์†Œ๋ชจํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ๊ฐ’๋“ค์„ doc_values ๋ผ๊ณ  ํ•˜๋Š” ๋ณ„๋„์˜ ์—ด ๊ธฐ๋ฐ˜ ์ €์žฅ์†Œ(columnar store)๋ฅผ ๋งŒ๋“ค์–ด ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ false๋กœ ํ•˜๋ฉด doc_values์— ๊ฐ’์„ ์ €์žฅํ•˜์ง€ ์•Š์•„ ์ง‘๊ณ„๋‚˜ ์ •๋ ฌ์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.
  • "ignore_above" : <์ž์—ฐ์ˆ˜> - ๋””ํดํŠธ๋Š” 2,147,483,647 ์ด๋ฉฐ ๋‹ค์ด๋‚˜๋ฏน ๋งคํ•‘์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉด ignore_above: 256 ๋กœ ์„ค์ •์ด ๋ฉ๋‹ˆ๋‹ค. ์„ค์ •๋œ ๊ธธ์ด ์ด์ƒ์˜ ๋ฌธ์ž์—ด์€ ์ƒ‰์ธ์„ ํ•˜์ง€ ์•Š์•„ ๊ฒ€์ƒ‰์ด๋‚˜ ์ง‘๊ณ„๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. _source์—๋Š” ๋‚จ์•„์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํ•„๋“œ ๊ฐ’์„ ์ฟผ๋ฆฌํ•ด์„œ ๋‚˜์˜จ ๊ฒฐ๊ณผ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • "normalizer" : "<๋…ธ๋ฉ€๋ผ์ด์ €๋ช…>" - keyword ํ•„๋“œ๋Š” ์• ๋„๋ผ์ด์ €๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋Œ€์‹  ๋…ธ๋ฉ€๋ผ์ด์ €(normalizer) ์˜ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋ฉ€๋ผ์ด์ €๋Š” ์• ๋„๋ผ์ด์ €์™€ ์œ ์‚ฌํ•˜๊ฒŒ settings ์—์„œ ์ •์˜ํ•˜๋ฉฐ ํ† ํฌ๋‚˜์ด์ €๋Š” ์ ์šฉํ•  ์ˆ˜ ์—†๊ณ  ์บ๋ฆญํ„ฐ ํ•„ํ„ฐ์™€ ํ† ํฐ ํ•„ํ„ฐ๋งŒ ์ ์šฉํ•ด์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
PUT blogs { "settings": { "analysis": { "analyzer": { "engram_a": { "tokenizer": "standard", "filter": [ "lowercase", "engram_f" ] } }, "filter": { "engram_f": { "type": "edge_ngram", "min_gram": 2, "max_gram": 5 } }, "normalizer": { "norm_low": { "type": "custom", "filter": [ "lowercase", "asciifolding" ] } } } }, "mappings": { "properties": { "title": { "type": "text", "boost": 2, "fields": { "keyword": { "type": "keyword", "normalizer": "norm_low" } } }, "author": { "type": "text", "analyzer": "engram_a", "search_analyzer": "standard", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "synopsis": { "type": "text", "fielddata": true }, "category": { "type": "keyword" }, "content": { "type": "text", "index": false } } } }
ย 
๐Ÿ’ก
๋”ฐ๋ผ์„œ, keyword ํƒ€์ž… ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„์˜ doc_values์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ ์ฃผ๋กœ ์„ฑ๋Šฅ ์ตœ์ ํ™”์™€ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜์—ฌ ์ €์žฅํ•˜๋ฉด, ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋” ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.
ย 

์ˆซ์ž - long, double โ€ฆ

  • long : 64๋น„ํŠธ ์ •์ˆ˜ (-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807)
  • integer : 32๋น„ํŠธ ์ •์ˆ˜ (-2147483648 ~ 2147483647)
  • short : 16๋น„ํŠธ ์ •์ˆ˜ (-32768 ~ 32767)
  • byte : 8๋น„ํŠธ ์ •์ˆ˜ (-128 ~ 127)
  • double : 64๋น„ํŠธ ์‹ค์ˆ˜
  • float : 32๋น„ํŠธ ์‹ค์ˆ˜
  • half_float : 16๋น„ํŠธ ์‹ค์ˆ˜
  • scaled_float : ์‹ค์ˆ˜ํ˜•์ด์ง€๋งŒ ๋ถ€๋™์†Œ์ˆ˜์ ์ด ์•„๋‹ˆ๋ผ long ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๊ณ  ์˜ต์…˜์œผ๋กœ ์†Œ์ˆ˜์  ์œ„์น˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ํ†ตํ™” (์˜ˆ: $19.99) ๊ฐ™์ด ์†Œ์ˆ˜์  ์ž๋ฆฌ๊ฐ€ ๊ณ ์ •๋œ ๊ฐ’์„ ํ‘œ์‹œํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋ชจ๋“  ์ˆซ์ž ํ•„๋“œ๋“ค์— ๊ณตํ†ต์ ์œผ๋กœ ์„ค์ • ๊ฐ€๋Šฅํ•œ ์˜ต์…˜๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • "index", "doc_values", "boost" ์˜ต์…˜๋“ค์€ text, keyword ํ•„๋“œ์˜ ์˜ต์…˜๋“ค๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
  • "coerce": <true | false> - ๋””ํดํŠธ๋Š” true ์ž…๋‹ˆ๋‹ค. ์ˆซ์ž ํ•„๋“œ๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆซ์ž๋กœ ์ดํ•ด๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ’๋“ค์€ ์ˆซ์ž๋กœ ๋ณ€๊ฒฝํ•ด์„œ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด integer ํ•„๋“œ์— 4, "4", 4.5 ๋“ฑ์„ ์ž…๋ ฅํ•˜๋ฉด ๋ชจ๋‘ ์ž์—ฐ์ˆ˜ 4๋กœ ์ž๋™์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. false ๋กœ ์„ค์ •ํ•˜๋ฉด ์ •ํ™•ํ•œ ํƒ€์ž…์œผ๋กœ ์ž…๋ ฅ๋˜์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • "null_value" : <์ˆซ์ž๊ฐ’> - ํ•„๋“œ๊ฐ’์ด ์ž…๋ ฅ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ null ์ธ ๊ฒฝ์šฐ ํ•ด๋‹น ํ•„๋“œ์˜ ๋””ํดํŠธ ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • "ignore_malformed" : <true | false> - ๋””ํดํŠธ๋Š” false ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆซ์ž ํ•„๋“œ์— ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž๋‚˜ ๋ถˆ๋ฆฐ ๊ฐ’์ด ๋“ค์–ด์˜ค๋ฉด Elasticsearch๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค. true๋กœ ์„ค์ •ํ•˜๊ฒŒ ๋˜๋ฉด ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฐ’์ด ๋“ค์–ด์™€๋„ ๋„ํ๋จผํŠธ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•ด๋‹น ํ•„๋“œ์˜ ๊ฐ’์€ _source ์—๋งŒ ์ €์žฅ๋˜๊ณ  ๊ฒ€์ƒ‰์ด๋‚˜ ์ง‘๊ณ„์—๋Š” ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.
๋‹ค์Œ์€ scaled_float ํƒ€์ž…์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.
  • "scaling_factor" : <10์˜ ๋ฐฐ์ˆ˜> - scaled_float ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ•„์ˆ˜๋กœ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ์†Œ์ˆ˜์  ๋ช‡ ์ž๋ฆฌ๊นŒ์ง€ ์ €์žฅํ• ์ง€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. 12.3456 ์ด๋ผ๋Š” ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ฒฝ์šฐ scaling_factor: 10 ์œผ๋กœ ์„ค์ •ํ–ˆ์œผ๋ฉด ์‹ค์ œ๋กœ๋Š” 12.3 ์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. scaling_factor : 100 ์œผ๋กœ ์„ค์ •ํ–ˆ์œผ๋ฉด 12.34 ๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
ย 

๋‚ ์งœ - date

๐Ÿ’ก
Elasticsearch์—์„œ ๋‚ ์งœ ํƒ€์ž…์€ ISO8601ํ˜•์‹์„ ๋”ฐ๋ผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • "2019-06-12"
  • "2019-06-12T17:13:40"
  • "2019-06-12T17:13:40+09:00"
  • "2019-06-12T17:13:40.428Z"
๐Ÿ’ก
์ด ์™ธ์—๋„ 1550282065513 ์™€ ๊ฐ™์ด long ํƒ€์ž…์˜ ์ •์ˆ˜์ธ epoch_millis ํ˜•ํƒœ์˜ ์ž…๋ ฅ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. epoch_millis ๋Š” 1970-01-01 00:00:00 ๋ถ€ํ„ฐ์˜ ์‹œ๊ฐ„์„ ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„๋กœ ์นด์šดํŠธ ํ•œ ๊ฐ’์ž…๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ํ˜•์‹์œผ๋กœ ๋‚ ์งœ๋ฅผ ์ €์žฅํ•˜๋ ค๋ฉด format์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์„œ ํ˜•ํƒœ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
// my_date ์ธ๋ฑ์Šค ์„ ์–ธ PUT my_date { "mappings": { "properties": { "date_val": { "type": "date", "format": "yyyy-MM-dd HH:mm:ss||yyyy/MM/dd||epoch_millis" } } } }
ย 

๋ถˆ๋ฆฌ์–ธ - boolean

  • "doc_values", "index" ์˜ต์…˜๋“ค์€ ๋ฌธ์ž์—ด, ์ˆซ์ž ํ•„๋“œ์™€ ๊ธฐ๋Šฅ์ด ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
  • "null_value" : <true | false> - ํ•„๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๊ฐ’์ด null ์ผ ๋•Œ ๋””ํดํŠธ ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ถˆ๋ฆฌ์–ธ ํ•„๋“œ๊ฐ€ ์—†๊ฑฐ๋‚˜ ๊ฐ’์ด null์ธ ๊ฒฝ์šฐ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด true / false ๋ชจ๋‘ ์ฟผ๋ฆฌ๋‚˜ ์ง‘๊ณ„์— ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
ย 

Object์™€ Nested

Object

๐Ÿ’ก
JSON์—์„œ๋Š” ํ•œ ํ•„๋“œ ์•ˆ์— ํ•˜์œ„ ํ•„๋“œ๋ฅผ ๋„ฃ๋Š” object, ์ฆ‰ ๊ฐ์ฒด ํƒ€์ž…์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณดํ†ต์€ ํ•œ ์š”์†Œ๊ฐ€ ์—ฌ๋Ÿฌ ํ•˜์œ„ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ objectํƒ€์ž… ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
// object ํƒ€์ž… characters ํ•„๋“œ๋ฅผ ๊ฐ€์ง„ ๋„ํ๋จผํŠธ PUT movie/_doc/1 { "characters": { "name": "Iron Man", "age": 46, "side": "superhero" } }
// ๋งคํ•‘์— object ํƒ€์ž… characters ํ•„๋“œ ์„ ์–ธ PUT movie { "mappings": { "properties": {// "characters": { "properties": {// "name": { "type": "text" }, "age": { "type": "byte" }, "side": { "type": "keyword" } } } } } }
๐Ÿ’ก
object ํ•„๋“œ๋ฅผ ์ฟผ๋ฆฌ๋กœ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์ง‘๊ณ„๋ฅผ ํ•  ๋•Œ๋Š” .์„ ์ด์šฉํ•ด์„œ ํ•˜์œ„ ํ•„๋“œ์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.
// characters ํ•˜์œ„์˜ name ํ•„๋“œ ์ฟผ๋ฆฌ GET movie/_search { "query": { "match": { "characters.name": "Iron Man" } } }
Elasticsearch์—๋Š” ๋”ฐ๋กœ ๋ฐฐ์—ด(array)ํƒ€์ž…์˜ ํ•„๋“œ๋ฅผ ์„ ์–ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„๋“œ ํƒ€์ž…์˜ ๊ฐ’๋งŒ ์ผ์น˜ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ’์„ ๋ฐฐ์—ด๋กœ๋„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • { "title": "Romeo and Juliet" }
  • { "title": [ "Romeo and Juliet", "Hamlet" ] }
ย 

ํ•„๋“œ์— object ๊ฐ’์ด 2๊ฐœ์”ฉ

// characters ํ•„๋“œ์— 2๊ฐœ์˜ ojbect ๊ฐ’๋“ค์„ ๋ฐฐ์—ด๋กœ ๊ฐ€์ง„ ๋„ํ๋จผํŠธ 2๊ฐœ ์ž…๋ ฅ PUT movie/_doc/2 { "title": "The Avengers", "characters": [ { "name": "Iron Man", "side": "superhero" }, { "name": "Loki", "side": "villain" } ] } PUT movie/_doc/3 { "title": "Avengers: Infinity War", "characters": [ { "name": "Loki", "side": "superhero" }, { "name": "Thanos", "side": "villain" } ] }
// characters ํ•˜์œ„ ํ•„๋“œ์˜ name: Loki, side: villain ๊ฒ€์ƒ‰ GET movie/_search { "query": { "bool": { "must": [ { "match": { "characters.name": "Loki" } }, { "match": { "characters.side": "villain" } } ] } } } // ๊ฒฐ๊ณผ { "took" : 2, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : 1.0611372, "hits" : [ { "_index" : "movie", "_type" : "_doc", "_id" : "3", "_score" : 1.0611372, "_source" : { "title" : "Avengers: Infinity War", "characters" : [ { "name" : "Loki", "side" : "superhero" }, { "name" : "Thanos", "side" : "villain" } ] } }, { "_index" : "movie", "_type" : "_doc", "_id" : "2", "_score" : 0.9827781, "_source" : { "title" : "The Avengers", "characters" : [ { "name" : "Iron Man", "side" : "superhero" }, { "name" : "Loki", "side" : "villain" } ] } } ] } }
๐Ÿ’ก
์›ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๋Š” ์ด์œ ๋Š” ์—ญ ์ƒ‰์ธ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ชจ์–‘์œผ๋กœ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์—ญ ์ƒ‰์ธ์€ ํ•„๋“œ ๋ณ„๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ๋ช…์‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
notion image
ย 

Nested

๐Ÿ’ก
๋งŒ์•ฝ object ํƒ€์ž… ํ•„๋“œ์— ์žˆ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ object ๊ฐ’๋“ค์ด ์„œ๋กœ ๋‹ค๋ฅธ ์—ญ ์ƒ‰์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋„๋ก ํ•˜๋ ค๋ฉด nested ํƒ€์ž…์œผ๋กœ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ธ๋ฑ์Šค๋ฅผ ๋งคํ•‘ํ• ๋•Œ "type": "nested" ๋ฅผ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.
// ๋งคํ•‘์— nested ํƒ€์ž… characters ํ•„๋“œ ์„ ์–ธ PUT movie { "mappings": { "properties": { "characters": { "type": "nested",// ํ•ด๋‹น ๋ถ€ "properties": { "name": { "type": "text" }, "side": { "type": "keyword" } } } } } }
๐Ÿ’ก
nested ํ•„๋“œ๋ฅผ ๊ฒ€์ƒ‰ ํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ nested ์ฟผ๋ฆฌ๋ฅผ ์จ์•ผํ•ฉ๋‹ˆ๋‹ค. nested ์ฟผ๋ฆฌ ์•ˆ์—๋Š” path๋ผ๋Š” ์˜ต์…˜์œผ๋กœ nested๋กœ ์ •์˜๋œ ํ•„๋“œ๋ฅผ ๋จผ์ € ๋ช…์‹œํ•˜๊ณ  ๊ทธ ์•ˆ์— ๋‹ค์‹œ ์ฟผ๋ฆฌ๋ฅผ ๋„ฃ์–ด์„œ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
// nested ์ฟผ๋ฆฌ๋กœ characters ํ•˜์œ„ ํ•„๋“œ์˜ name: Loki, side: villain ๊ฒ€์ƒ‰ GET movie/_search { "query": {// ํ•ด๋‹น "nested": {// ๋ถ€๋ถ„ "path": "characters",// ํ•„์š” "query": { "bool": { "must": [ { "match": { "characters.name": "Loki" } }, { "match": { "characters.side": "villain" } } ] } } } } }
nested ์ฟผ๋ฆฌ๋กœ ๊ฒ€์ƒ‰ํ•˜๋ฉด nested ํ•„๋“œ์˜ ๋‚ด๋ถ€์— ์žˆ๋Š” ๊ฐ’ ๋“ค์„ ๋ชจ๋‘ ๋ณ„๊ฐœ์˜ ๋„ํ๋จผํŠธ๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.
notion image
ย 

์œ„์น˜ ์ •๋ณด - Geo

Geo Point

Geo Point๋Š” ์œ„๋„(latitude)์™€ ๊ฒฝ๋„(longitude) ๋‘ ๊ฐœ์˜ ์‹ค์ˆ˜ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์ง€๋„ ์œ„์˜ ํ•œ์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž…๋ ฅ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
// object ํ˜•์‹์œผ๋กœ geo_point ์ž…๋ ฅ PUT my_locations/_doc/1 { "location": { "lat": 41.12, "lon": -71.34 } } // text ํ˜•์‹์œผ๋กœ geo_point ์ž…๋ ฅ PUT my_index/_doc/2 { "location": "41.12,-71.34" } // geohash ํ˜•์‹์œผ๋กœ geo_point ์ž…๋ ฅ PUT my_index/_doc/3 { "location": "drm3btev3e86" } // ์‹ค์ˆ˜์˜ ๋ฐฐ์—ด ํ˜•์‹์œผ๋กœ geo_point ์ž…๋ ฅ PUT my_index/_doc/4 { "location": [ -71.34, 41.12 ] }
๐Ÿ’ก
์ผ๋ฐ˜์ ์œผ๋กœ object ํ˜•์‹์œผ๋กœ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
ย 

๊ธฐํƒ€ ํ•„๋“œ ํƒ€์ž… - IP, Range, Binary

IP

๐Ÿ’ก
IP ์ฃผ์†Œ ํ˜•์‹์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋งคํ•‘์€ "type": "ip" ์œผ๋กœ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ "192.168.1.1" ๊ฐ™์€ IPv4 ํ˜•์‹๊ณผ "0:0:0:0:0:ffff:c0a8:105" ๊ฐ™์€ IPv6 ํ˜•์‹์„ ๋ฌธ์ž์—ด ์ฒ˜๋Ÿผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
ย 

๋ฒ”์œ„(Range)

๐Ÿ’ก
์ˆซ์ž๋‚˜ ๋‚ ์งœ, IP ๋“ฑ์„ ์‹œ์ž‘๊ณผ ๋์ด ์žˆ๋Š” 2์ฐจ์›์˜ ๋ฒ”์œ„ ํ˜•ํƒœ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋งคํŒฝ์˜ "type" ์— ์„ ์–ธ ๊ฐ€๋Šฅํ•œ ๊ฐ’์€ integer_range, float_range, long_range, double_range, date_range, ip_range ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด gt, gte, lt, lte ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
// integer_range ์™€ date_range ํƒ€์ž…์˜ ํ•„๋“œ ์„ ์–ธ PUT my_range { "mappings": { "properties": { "amount": { "type": "integer_range" }, "days": { "type": "date_range" } } } }
// integer_range, date_range ํƒ€์ž…์˜ ๊ฐ’์„ ๊ฐ€์ง„ ๋„ํ๋จผํŠธ ์ž…๋ ฅ PUT my_range/_doc/1 { "amount": { "gte": 19, "lt": 28 }, "days": { "gt": "2019-06-01T09:00:00", "lt": "2019-06-20" } }
๐Ÿ’ก
Range ํ•„๋“œ์˜ ์ฟผ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์ธ ์ˆซ์ž๋‚˜ ๋‚ ์งœ ์ฒ˜๋Ÿผ range ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๋ฒ”์œ„ ๋ฐ์ดํ„ฐ๋ฅผ range ์ฟผ๋ฆฌ๋กœ ๊ฒ€์ƒ‰ ํ•  ๋•Œ๋Š” ์ถ”๊ฐ€๋กœ relation ์˜ต์…˜์˜ ๊ฐ’์„ ์ž…๋ ฅํ•ด์•ผ ํ•˜๋ฉฐ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค. relation ์˜ต์…˜์— ์ง€์ • ๊ฐ€๋Šฅํ•œ ๊ฐ’์€ within, contains, intersects 3๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • within : ๋„ํ๋จผํŠธ ๋ฒ”์œ„ ๊ฐ’์ด ์ฟผ๋ฆฌํ•œ ๋ฒ”์œ„ ์•ˆ์— ์™„์ „ํžˆ ํฌํ•จ๋˜๋Š” ๋„ํ๋จผํŠธ๋“ค์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • contains : within๊ณผ ๋ฐ˜๋Œ€๋กœ ์ฟผ๋ฆฌ ๋ฒ”์œ„๊ฐ€ ๋„ํ๋จผํŠธ ๋ฒ”์œ„ ๊ฐ’ ์•ˆ์— ์™„์ „ํžˆ ํฌํ•จ๋˜๋Š” ๋„ํ๋จผํŠธ๋“ค์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • Intersects : ๋„ํ๋จผํŠธ ๋ฒ”์œ„ ๊ฐ’๊ณผ ์ฟผ๋ฆฌ ๋ฒ”์œ„์— ๊ณตํ†ต์ ์ธ ๋ถ€๋ถ„์ด ์žˆ๋Š” ๋„ํ๋จผํŠธ๋“ค์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
// "relation": "intersects" ์œผ๋กœ range ์ฟผ๋ฆฌ GET my_range/_search { "query": { "range": { "amount": { "gte": "16", "lte": "25", "relation": "intersects" } } } }
ย 

Binary

๐Ÿ’ก
"type": "binary" ๋กœ ์ง€์ •ํ•ด์„œ ์‹œ์Šคํ…œ ํŒŒ์ผ์ด๋‚˜ ์ด๋ฏธ์ง€ ์ •๋ณด ๊ฐ™์€ ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. binary ํ•„๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ‰์ธ์ด ๋˜์ง€ ์•Š์•„ ๊ฒ€์ƒ‰์ด๋‚˜ ์ง‘๊ณ„๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  _source์—๋งŒ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.
ย 

๋ฉ€ํ‹ฐ (๋‹ค์ค‘) ํ•„๋“œ - Multi Field

๐Ÿ’ก
Elasticsearch ์˜ ๋„ํ๋จผํŠธ์—๋Š” ํ•˜๋‚˜์˜ ํ•„๋“œ๊ฐ’๋งŒ ์žˆ์ง€๋งŒ ์ด ํ•„๋“œ์˜ ๊ฐ’์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์—ญ ์ƒ‰์ธ ๋ฐ doc_values ๋“ค๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์ค‘ ํ•„๋“œ, ์ฆ‰ ๋ฉ€ํ‹ฐ ํ•„๋“œ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณดํ†ต์€ text ํƒ€์ž… ์•„๋ž˜์— keyword ํƒ€์ž…์„ ๊ฐ™์ด ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
// ๋ฉ€ํ‹ฐ ํ•„๋“œ ์„ค์ • PUT my_index { "mappings": { "properties": { "<ํ•„๋“œ๋ช…1>": { "type": "text", "fields": { "<ํ•„๋“œ๋ช…2>": { "type": "<ํƒ€์ž…>" } } } } } }
// english, nori_analyzer ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” message ์˜ ๋ฉ€ํ‹ฐํ•„๋“œ ์ •์˜ PUT my_index { "settings": { "analysis": { "analyzer": { "nori_analyzer": { "tokenizer": "nori_tokenizer" } } } }, "mappings": { "properties": { "message": { "type": "text", "fields": { "english": { "type": "text", "analyzer": "english" }, "nori": { "type": "text", "analyzer": "nori_analyzer" } } } } } }
์œ„์™€ ๊ฐ™์ด ๋งคํ•‘์„ ์ •์˜ํ•˜๋ฉด ๋„ํ๋จผํŠธ์—๋Š” message ํ•„๋“œ๊ฐ’๋งŒ ์žˆ์–ด๋„ message, message.english, messgae.nori ์ด 3๊ฐœ์˜ ์—ญ ์ƒ‰์ธ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
๐Ÿ’ก
๋ฉ€ํ‹ฐ ํ•„๋“œ๋Š” ํ•œ ํ•„๋“œ์— ์—ฌ๋Ÿฌ ์• ๋„๋ผ์ด์ €๋ฅผ ์ ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ํŠนํžˆ ๋‹ค๊ตญ์–ด๋กœ ์”Œ์—ฌ์ง„ ๋„ํ๋จผํŠธ๋ฅผ ๋ถ„์„ํ•ด์•ผํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
ย 

References::

Loading Comments...