반응형
Elasitcsearch 로컬 실행
2022.07.12 - [docker] - Docker + Elasticsearch, Kibana 구성 (single node)
type
1. 종류
종류 | 설명 |
text | 문자열, 전문 텍스트(full text) 검색용 (역색인 구조) |
keyword | 문자열, 형태소 분석을 하지 않음 |
byte, short, integer, long | 정수 |
float, double, half_float, scaled_float | 실수 |
data | 날짜 |
boolean | true, false |
list | 리스트 각 데이터 타입은 동일해야함 |
object | 한 필드 안에 하위 필드를 가질수 있음 필드 내부에 있는 값 들을 모두 하나의 도큐먼트로 취급 |
nested | 한 필드 안에 하위 필드를 가질수 있음 필드 내부에 있는 값 들을 모두 별개의 도큐먼트로 취급 |
2. 비교
2-1 text vs keyword
- text : 전문 텍스트(full text) 검색용 (역 색인 구조)
- keyword : 형태소 분석을 하지 않음
text
PUT product-text
{
"mappings": {
"properties": {
"name": {
"type": "text"
}
}
}
}
POST product-text/_doc
{
"name": "samsung laptop"
}
GET product-text/_search
{
"query": {
"match": {
"name": "laptop"
}
}
}
데이터 있음
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.2876821,
"hits" : [
{
"_index" : "product-text",
"_type" : "_doc",
"_id" : "k5lCNoMBEcCPHPUCzBjv",
"_score" : 0.2876821,
"_source" : {
"name" : "samsung laptop"
}
}
]
}
}
keyword
PUT product-keyword
{
"mappings": {
"properties": {
"name": {
"type": "keyword"
}
}
}
}
POST product-keyword/_doc/1
{
"name": "samsung laptop"
}
GET product-keyword/_search
{
"query": {
"match": {
"name": "laptop"
}
}
}
데이터 없음
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 0,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
}
}
2-2 object vs netsted
- object : 필드 내부에 있는 값 들을 하나의 도큐먼트로 취급
- netsted : 필드 내부에 있는 값 들을 모두 별개의 도큐먼트로 취급
object
PUT product-object
{
"mappings": {
"properties": {
"detail": {
"properties": {
"gift": {
"type": "text"
},
"maker": {
"type": "text"
}
}
}
}
}
}
PUT product-object/_doc/1
{
"detail": [
{
"gift" : "마우스패드",
"maker": "레노버"
},
{
"gift" : "키보드",
"maker": "한성"
}
]
}
PUT product-object/_doc/2
{
"detail": [
{
"gift" : "헤드셋",
"maker": "삼성"
},
{
"gift" : "마우스패드",
"maker": "한성"
}
]
}
GET product-object/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"detail.gift": "마우스패드"
}
},
{
"match": {
"detail.maker": "한성"
}
}
]
}
}
}
결과 2개
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 0.36464313,
"hits" : [
{
"_index" : "product-object",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.36464313,
"_source" : {
"detail" : [
{
"gift" : "마우스패드",
"maker" : "레노버"
},
{
"gift" : "키보드",
"maker" : "한성"
}
]
}
},
{
"_index" : "product-object",
"_type" : "_doc",
"_id" : "2",
"_score" : 0.36464313,
"_source" : {
"detail" : [
{
"gift" : "헤드셋",
"maker" : "삼성"
},
{
"gift" : "마우스패드",
"maker" : "한성"
}
]
}
}
]
}
}
netsted
PUT product-nested
{
"mappings": {
"properties": {
"detail": {
"type": "nested",
"properties": {
"gift": {
"type": "text"
},
"maker": {
"type": "text"
}
}
}
}
}
}
PUT product-nested/_doc/1
{
"detail": [
{
"gift" : "마우스패드",
"maker": "레노버"
},
{
"gift" : "키보드",
"maker": "한성"
}
]
}
PUT product-nested/_doc/2
{
"detail": [
{
"gift" : "헤드셋",
"maker": "삼성"
},
{
"gift" : "마우스패드",
"maker": "한성"
}
]
}
GET product-nested/_search
{
"query": {
"nested": {
"path": "detail",
"query": {
"bool": {
"must": [
{
"match": {
"detail.gift": "마우스패드"
}
},
{
"match": {
"detail.maker": "한성"
}
}
]
}
}
}
}
}
결과 1개
{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.3862942,
"hits" : [
{
"_index" : "product-nested",
"_type" : "_doc",
"_id" : "2",
"_score" : 1.3862942,
"_source" : {
"detail" : [
{
"gift" : "헤드셋",
"maker" : "삼성"
},
{
"gift" : "마우스패드",
"maker" : "한성"
}
]
}
}
]
}
}
반응형
'ELK' 카테고리의 다른 글
Elasticsearch Reindex를 사용해 신규 index 생성 (0) | 2022.10.14 |
---|---|
Elasticsearch enabled index 옵션 차이 (0) | 2022.09.14 |
Elastic APM 구성해보기 (0) | 2022.08.24 |
Elasticsearch nori plugin 사용해보기 (0) | 2022.07.27 |
Elasticsearch Index Lifecycle Management (ILM) 사용해 보기 (0) | 2022.07.19 |