본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


엘라스틱서치(Elasticsearch)

엘라스틱 서치 기초 질의문 정리(Elasticsearch query)

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2021. 3. 9.

기초 질의문을 정리합니다.

 * 색인 확인 : http://주소/_cat/indices?v

 * 인덱스 검색 : http://주소 /인덱스/_search

 * 인덱스 갯수 : http://주소 /인덱스/_count

 

1. 정렬

1) 오름차순
{    
    "sort" : [
        {"대상" : "asc"}
    ]
} 

2) 내림차순
{    
    "sort" : [
        {"대상" : "desc"}
    ]    
}

 

2. 검색

1) 전부 검색
 {
    "query": {
        "match_all": {}
    }
}

2) 값 일치 검색
 {
    "query": {
        "match": {
            필드 : 조건값
        }
    }
}
 
3) 구문 검색
 {
    "query": {
        "match_phrase": {
            필드 : 조건값
        }
    }
}   

4) AND 검색(N개의 조건이 일치, 여기선 2개의 대한 샘플)
{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "필드1": "조건1"
                    }
                },
                {
                    "match": {
                        "필드2": "조건2"
                    }
                }
            ]
        }
    }
}

5) OR 검색(N개의 조건 중 1개, 여기선 2개의 대한 샘플)
{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "필드1": "조건1"
                    }
                },
                {
                    "match": {
                        "필드2": "조건2"
                    }
                }
            ]
        }
    }
}

6) AND NOT 검색(N개의 조건 아닌것, 여기선 2개의 대한 샘플)
{
    "query": {
        "bool": {
            "must_not": [
                {
                    "match": {
                        "필드1": "조건1"
                    }
                },
                {
                    "match": {
                        "필드2": "조건2"
                    }
                }
            ]
        }
    }
}

7) 필터 검색(BOOL 조건에서 필터링 추가, 여기선 match에 대한 필터로 추가, 필터 단독 사용 가능)
{
    "query": {
        "bool": {
            "must": {
                "match": {
                    "필드1": "조건1"
                }
            },
            "filter": {
                "range": {
                    "범위값": {
                        "gte": 20000,
                        "lte": 30000
                    }
                }
            }
        }
    }
}

8) 와일드 카드
{
    "query": {
        "bool": {
            "must": {
                "wildcard": {
                    "필드": "*조건*"
                }
            }
        }
    }
}

9) 정규 표현식
{
    "query": {
        "regexp": {
            "필드1": ".*값.*"
        }
    }
}

10) 형태소
{
    "query": {
        "term": {
            "필드1": "값"
        }
    }
}

11) N개의 형태소
{
    "query": {
        "terms": {
            "필드1": [
                "값1",
                "값2",
                "값3",
            ],
            "minium_should_match": 일치갯수(숫자)
        }
    }
}

12) 접두어
{
    "query": {
        "prefix": {
            "필드": "값"
        }
    }
}

13) 찾고자 하는 필드 존재 여부 (있음)
{
    "query": {
        "exists": {
            "field": "대상필드"
        }
    }
}

13) 찾고자 하는 필드 존재 여부 (없음)
{
    "query": {
        "bool": {
            "must_not": [
                {
                    "exists": {
                        "field": "대상필드"
                    }
                }
            ]
        } 
    }
}

14) 논리형 데이터 질의(값이 true, false로 저장되어 있는 경우)
{
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "대상필드": false
                    }
                }
            ]

        }
        
    }
}

 

3. 그룹핑(별칭 aa, bb로 그룹핑 한 경우)

{
    "size": 0,
    "aggs": {
        "aa": {
            "terms": {
                "field": "필드1.keyword"
            },
            "aggs": {
                "bb": {
                    "terms": {
                        "field": "필드1.keyword"
                    }
                }
            }
        }
    }
}

 

4. 페이징을 위한 제한

 1) 가져오는 크기 지정
 {
     "size": 1    
 }
 
 2) 시작부분 지정
 {
     "from": 1    
 }

 

5. 조회시 결과값 대상 지정(원하는 항목만 나오게)

{
    "_source": [
        "원하는 필드1",
        "원하는 필드2",
    ]
}

 

6. 데이터 Field 변경

PUT 주소/_mapping/_doc
{
    "properties": {
        "대상": { 
            "type":     "text",
            "fielddata": true
        }
    }
}

 

7. 매핑 규칙 적용

{
    "mappings": {       
        "type": {
            "properties": {
                "대상": {
                    "type": "double"  #형태
                }
            }
        }
    }
}

 

8. 매핑 규칙 추가

PUT 주소/대상/_mapping/_doc
{
    "properties": {
        "새로추가": {
            "type": "float" #형식
        }
    }
}

 

9. 조회 한계 설정

PUT 주소/대상/_settings
{ 
  "max_result_window" : 500000 
}
반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글