# REST API
Representational State Transfer(REST) + Application Programming Interface(API)
Rest Api 상의 CRUD 매핑 Method
Create : PUT
Read : Get, Post
Update : Post
Delete : Delete
# cURL : 클라이언트 URL 방식(cURL)
curl -XGET "localhost:9200" : localhost:9200 url로 GET 요청보낸 결과값을 보여달라.
curl -XGET "localhost:9200/update_sample1/_search"
curl -XGET "<ElasticSearch Base 접속 정보>/<인덱스명>/_search"
GET <인덱스명>/_search
GET <인덱스명>/_search
{
"query":{
"match_all": {}
}
}
# 검색 결과 항목
- took : 일라스틱서치가 검색을 실행하는데 소요된 시간
- timed_out : 검색 시간 초과
- _shards : 검색된 샤드(파편) 정보
- hits : 검색 결과
- hits.total : 검색 조건과 일치하는 문서의 총개수
- hits.total.value : 검색 조건과 일치하는 문서의 총개수
- hits.total.relation : 'eq'
- hits.hits : 검색결과의 필드항목 배열
Tip. text 속성의 경우, 자동으로 소문자로 변경되어 전문 검색되지만, (Sunday와 sunday가 같다)
keyword 속성의 경우, 완전 일치 해야만 검색결과를 보여준다.(Sunday와 sunday가 다르다)
# 검색옵션 :
1. match_all
GET kibana_sample_data_ecommerce/_search
2. match
GET kibana_sample_data_ecommerce/_search
{
"query": {
"match": {
"customer_gender": "FEMALE"
//"customer_gender.keyword": "FEMALE"
}
}
}
2-1. match의 검색 옵션 : explain(기본값 : false)
일반적으로 쓰이지는 않지만, 확인 용도
2-2. match의 검색 옵션 : size(기본값 : 20, max : 10000)
match 점수가 높은 top 20만 보인다.
2-3. match의 검색 옵션 : from(기본값 : 1)
해당 몇번째부터 검색하겠다.
GET kibana_sample_data_ecommerce/_search
{
"query": {
"match": {
"customer_gender": "FEMALE"
}
},
"explain": true,
"from" : 20,
"size": 40
} // 20~40번째까지만 검색하겠다?
3. sort
# 검색옵션 : sort
GET kibana_sample_data_ecommerce/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"customer_id": {
"order": "desc"
}
}
]
}
4. _source
sql에서, select 다음에오는 속성 리스트와 같이 조회하고자 하는 속성만 보고 싶을 떄
# 검색옵션 : _source
GET kibana_sample_data_ecommerce/_search
{
"query": {
"match_all": {}
},
"_source": ["customer_first_name","customer_id"]
}
GET kibana_sample_data_ecommerce/_search
{
"query": {
"match_all": {}
},
"_source": {
"excludes": ["currency", "geoip.city_name"] // "excludes": "*"
}
}
5. bool -> must (판단 로직)
# 검색 옵션: bool
GET kibana_sample_data_ecommerce/_search
{
"query": {
"bool": { // 판단하겠다.
"must": [ // AND
{
"match": {
"geoip.continent_name": "africa"
}
}, //AND
{
"match": {
"category": "cairo"
}
}
]
}
}
}
5-2. bool -> should
GET kibana_sample_data_ecommerce/_search
{
"query": {
"bool": {
"should": [ // OR
{
"match": {
"geoip.continent_name": "asia"
}
},
{
"match": {
"geoip.continent_name": "africa"
}
}
]
}
},
"size": 200
}
GET kibana_sample_data_ecommerce/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"customer_gender": "male"
}
}
], // Must의 값을 찾되, should로 가중치를 올려서,
"should": [
{
"match": {
"geoip.continent_name": "asia"
}
}
]
}
},
"size": 200
}
# 집계
GET sample_data/_search
{
"size": 0, //집계 이외의 상세 ROW들은 별로 필요없다(match_all한 결과값 필요없음
"aggs": { // 집계하겠다.
"group_by_continent": { //사용자 정의 집계 이름
"terms": { //집계방식 : terms (특정 필드값에 따라 집계, Groupinig)
"field": "geoip.continent_name", //만약에 text 형식이면 에러, .keyword를 붙여줘야함
"size": 10
}
}
}
}
# 다중 집계 (그룹핑을 여러번, Depth를 만들어서, 사용자들이 원하는 것을 쉽게 얻어낼 수 있다.)
GET sample_data/_search
{
"size": 0,
"aggs": {
"group_by_continent": { // continent_name별로 그룹핑
"terms": {
"field": "geoip.continent_name",
"size": 10
},
"aggs": { // 대륙 내에서, price로 그룹핑 후 계산
"avg_price": {
"avg": {
"field": "products.price"
}
}
}
}
}
}
'Development Stack > ELK' 카테고리의 다른 글
[ELK] 과제로 정리하기 - 시각화 (0) | 2020.12.08 |
---|---|
[ELK] 과제로 정리하기 - 검색 기능 (0) | 2020.12.08 |
[ELK] 과제로 정리하기 - 기본 index 생성, 데이터 적재 (0) | 2020.12.08 |
[ELK] 데이터 시각화 (0) | 2020.12.01 |
[ELK] 개요 (0) | 2020.12.01 |
최근댓글