본문 바로가기

개발관련

Elasticsearch 엘라스틱서치 조회 쿼리

728x90

ES 조회쿼리는 몇 번만 조회해보면 간단하게 알 수 있다. 

{
    "size": 1000,                      //검색 결과 개수 지정 
    "query": {                         //검색 쿼리 
        "bool": {
            "must": [                  //검색 결과에 포함 되야 할 조건 쿼리
                {
                    "script": {
                        "script": {
                            "source": "InternalQlScriptUtils.nullSafeFilter(InternalQlScriptUtils.and(InternalQlScriptUtils.gte(InternalSqlScriptUtils.left(InternalQlScriptUtils.docValue(doc.params.str),params.len),params.start),InternalQlScriptUtils.lte(InternalSqlScriptUtils.left(InternalQlScriptUtils.docValue(doc,params.str),params.len),params.end)))",
                            "lang": "painless",
                            "params": {
                                "str": "startDate.keyword",
                                "len": 8,              //아래 start end param의 길이 
                                "start": "20201212",   
                                "end": "20201213"
                            }
                        },
                        "boost": 1            //둘 이상의 쿼리가 포함된 검색에 대한
                    }                         // 관련성 점수(기본값 1.0  0~1사이의 값은 관련성 점수를 낮추고 높으면 올라감)
                },
                {
                    "range": {
                        "startDate": {             //범위조회

                            "gte": 20211018,
                            "lte": 20211019
                        }
                    }
                },
                {
                    "exists": {                   //해당 필드가 존재유무 
                        "field": "userId",     //(값이 null 혹은 []일 경우 존재하지 않음으로 간주) 
                        "boost": 1
                    }
                },
                {
                    "term": {                     // 해당 필드의 해당 value 검색
                        "userId": {                
                            "value": 1,
                            "boost": 1
                        }
                    }
                },
                {
                    "term": {                      
                        "username.keyword": {   // value 타입이 빈칸이 포함 될 수있는 Text형식이면 이면 필드명.keyword
                            "value": "user1",    // 혹은 match 쿼리가 적절 
                            "boost": 1
                        }
                    }
                },
								{
                    "wildcard": {                      
                        "username": {   // *을 사용해 value가 포함된 검색결과 조회 
                            "value": "user*",    
    
                        }
                    }
                }
            ],
            "must_not": [                       //포함되지 않아야 할 조건 입력 쿼리
                {
                    "terms": {                  // 여러값 검색 조건
                        "apiKey.keyword": [
                            "aaa",
                            "bbb",
                            "ccc"
                        ],
                        "boost": 1
                    }
                }
            ]
        }
    },
    "sort": [                                  //검색 결과 정렬 
        {
            "timestamp.keyword": {
                "order": "desc"
            }
        }
    ],
    "aggregations": {                         //검색 결과 group by 
        "groupby": {
            "composite": {
                "size": 1000,
                "sources": [
                    {
                        "groupby_name": {     //해당조건 시 apiKey 결과 표시
                            "terms": {
                                "field": "apiKey.keyword",
                                "missing_bucket": true,
                                "order": "asc"
                            }
                        }
                    }
                ]
            }
        }
    },
    "agg": {
        "중복제거카운트": {                   //중복값제거한 고유값에 대한 카운트
            "cardinality": {
                "field": "shoppingList.keyword"
            }
        }
    }
}

쿼리 내용중에 필요한 부분만 중괄호{} 앞뒤로 잘 잘라서 쿼리에 이어붙이면서 써보면 확인 가능 할 것이다. 

 

728x90

'개발관련' 카테고리의 다른 글

Git 원격 저장소 이름 바꾸기  (0) 2023.11.24
GitLab설치  (0) 2023.08.08
Ubuntu 우분투 초기 셋팅 히스토리  (0) 2023.08.08
성능테스트  (0) 2023.08.08
리눅스마스터2급 족보  (0) 2023.08.08