elasticsearch - DSL 고급 조회 문법 정리

7320 단어
DSL 구문 조회
검색 문자열 검색 은 명령 행 을 통 해 특정 (ad hoc) 검색 을 수행 하 는 데 편리 하지만 한계 가 있 습 니 다 (간단 한 검색 장 참조).Elasticsearch 는 DSL 조회 (Query DSL) 라 는 풍부 하고 유연 한 조회 언어 를 제공 합 니 다. 더욱 복잡 하고 강력 한 조 회 를 구축 할 수 있 습 니 다.DSL (Domain Specific Language 특정 영역 언어) 이 JSON 요청 체 로 나 타 났 습 니 다.
쿼 리 컨 텍스트
주요 특징:
  • 포함 여부
  • 문서 가 결과 의 일부분 이 되 어야 하 는 지 확인 합 니 다.
  • 관련 도 득점 이 얼마
  • 문서 가 일치 하 는 지 확인 하 는 것 외 에 검색 자 구 는 문서 가 다른 문서 에 비해 일치 하 는 정 도 를 나타 내 는score
  • 득점 이 높 을 수록 관련 도가 높다
  • 더 관련 된 파일 은 검색 순위 가 높 습 니 다.
    응용 필드:
  • 전문 검색 - 이러한 관련 성 개념 은 전문 검색 에 매우 적합 하 다. 왜냐하면 완전히 '정 답' 이 없 기 때문이다
  • 텍스트 검색 문법:
    match - 모호 일치: '4 대 명작' 을 검색 하면 '4 대' OR '명작' OR '4 대 명작' 이 포 함 된 기록 을 찾 을 수 있 습 니 다.
    GET /megacorp/employee/_search
    {
       "query" : {
           "match" : {
               "last_name" : "    "
           }
       }
    }
    

    match_"4 대 명작" 을 검색 하면 "4 대" OR "명작" 이 포 함 된 기록 만 찾 을 수 있 습 니 다.
    GET /megacorp/employee/_search
    {
       "query" : {
           "match_phrase" : {
               "last_name" : "    "
           }
       }
    }
    

    multi_match - 다 중 필드 일치: "손오공" 을 검색 하면 firstname 또는 about 필드 에 '손오공' 또는 '손' 등 단어 가 포함 되 어 있 으 면 찾 을 수 있 습 니 다.
    GET /megacorp/employee/_search
    {
         "query": {
              "multi_match": {
                   "query": "   ",
                   "fields":["first_name","about"]
              }
         }
    }
    

    query_string - lucene 조회 문법 조회 (kibana 조회 문법)
    GET /megacorp/employee/_search
    {
         "query": {
              "query_string": {
                   "query": "    OR   "
              }
         }
    }
    

    query_string - 다 중 필드
    GET /megacorp/employee/_search
    {
         "query": {
              "query_string": {
                    "fields":["about","last_name"],
                   "query": "    OR   "
              }
         }
    }
    

    하 이 라이트 검색
    GET /megacorp/employee/_search
    {
       "query" : {
           "match_phrase" : {
               "about" : "   "
           }
       },
       "highlight": {
           "fields" : {
               "about" : {}
           }
       }
    }
    

    구조 조회 문법:
    term - 후진 색인 에 저 장 된 정확 한 단어 에 따라 작 동 합 니 다. 이 조 회 는 보통 전체 텍스트 필드 가 아 닌 숫자, 날짜, 매 거 진 등 구조 화 된 데이터 에 사 용 됩 니 다.또는 저급한 조 회 를 만 들 고 분석 과정 전에 진행 할 수 있 습 니 다.
    GET /megacorp/employee/_search
    {
         "query": {
              "term": {
                    "age":"33"
              }
         }
    }
    

    range 범위 조회 - 조회 age 가 20 보다 크 면 30 보다 작은 기록
    GET /megacorp/employee/_search
    {
         "query": {
              "range": {
                    "age":{
                        "gte":20,
                        "lte":30
                    }
              }
         }
    }
    

    2. fiter context
    주요 특징:
  • 포함 여부
  • 검색 결과 에 포함 되 었 는 지 확인 하고 '예' 또는 '아니오' 만 대답 하 며 정확하게 검색 합 니 다.
  • 평 점 관련 없 음
  • 검색 중 추가 관련 도 순위 가 없습니다.
  • 구조 화 된 데이터 에 대한
  • 정확 한 일치, 범위 검색 에 적용
  • 더 빨리
  • 결과 포함 여부 만 확인 하고 득점 은 고려 할 필요 가 없다.왜 더 빨 라? -자주 사용 하 는 필 터 는 Elasticsearch 에 자동 으로 캐 시 되 어 성능 을 향상 시 킵 니 다.
    검색 문법:
    bool 키워드
    GET /megacorp/employee/_search
    {
         "query": {
              "bool": {
                    "filter":{
                        "term":{
                            "age":33
                        }
                    }
              }
         }
    }
    

    복합 조회
    constant_score - 내부 결 과 를 조회 하 는 문서 의 점 수 를 모두 1 또는 boost 의 값 으로 설정 하고 bool 조회 와 결합 하여 사용자 정의 점 수 를 실현 하 는 데 사용 합 니 다.
    GET /megacorp/employee/_search
    {
         "query": {
              "constant_score": {
                    "filter":{
                        "match":{
                            "about":"  "
                        }
                    }
              }
         }
    }
    

    사용자 정의 점수
    GET /megacorp/employee/_search
    {
         "query": {
              "constant_score": {
                    "filter":{
                        "match":{
                            "about":"  "
                        }
                    }
              },
              "boots":2
         }
    }
    

    should - 적어도 한 가지 조건 을 만족 시 켜 야 한다.
    GET /megacorp/employee/_search
    {
        "query": {
            "bool": {
                "should": [
                    {
                        "match": {
                            "first_name": "   "
                        }
                    },
                    {
                        "match": {
                            "last_name": "  "
                        }
                    }
                ]
            }
        }
    }
    

    must - 모든 조건 을 동시에 만족 시 켜 야 합 니 다.
    GET /megacorp/employee/_search
    {
        "query": {
            "bool": {
                "must": [
                    {
                        "match": {
                            "first_name": "   "
                        }
                    },
                    {
                        "match": {
                            "about": "    "
                        }
                    }
                ]
            }
        }
    }
    

    must_no - 조건 을 만족 시 키 지 않 아야 합 니 다. 예 를 들 어 33 세의 기록 을 찾 는 것 과 같 지 않 습 니 다.
    GET /megacorp/employee/_search
    {
        "query": {
            "bool": {
                "must_not": 
                    {
                        "term": {
                            "age": "33"
                        }
                    }
            }
        }
    }
    

    조합 조회
    GET /megacorp/employee/_search 
    {
        "query": {
            "bool": {
                "must": [
                    {
                        "match": {
                            "first_name": "   "
                        }
                    },
                    {
                        "match": {
                            "about": "    "
                        }
                    }
                ],
                "filter":{
                    "term":{
                        "age":35
                    }
                }
            }
        }
    }
    

    취 합 조회 GROUP BY
    //        
    GET /megacorp/employee/_search
    {
     "aggs": {
       "group_by_age": {
         "terms": { "field": "age" }
       }
     }
    }
    
    //      
    GET /megacorp/employee/_search
    {
     "query": {
       "match": {
         "last_name": "   "
       }
     },
     "aggs": {
       "group_by_age": {
         "terms": { "field": "age" }
       }
     }
    }
    
    //       
    GET /megacorp/employee/_search
    {
     "aggs": {
       "group_by_age": {
         "terms": { "field": "age" },
         "aggs" : {
                   "avg_age" : {
                       "avg" : { "field" : "age" }
                   }
               }
       }
     }
    }
    

    좋은 웹페이지 즐겨찾기