DSL 필터 쿼리

1. DSL 문의 란 

  좀 더 구축 할 수 있습니다 (쿼리 DSL)이 ES의 DSL 쿼리에 의해 호출 풍부하고 유연한 쿼리 언어, 제공 복잡한 , 강력한 쿼리를.

  DSL 에서 (도메인 특정 언어 도메인 특정 언어) JSON 형태로 기관의 요청이 발생합니다.  

  DSL은 일반 쿼리 쿼리 ES 제공,이 방법의 가장 큰 특징입니다 개발 언어독립 모든 클라이언트만큼 지원 HTTP 요청을 수행 할 수 있습니다, 즉, JSON 형식이 복잡한 검색 쿼리 데이터를 수행 할 수 있습니다.

  

  대한 간단한 쿼리 사용하여 쿼리 문자열 하지만에 대한 더 복잡한 쿼리 , 조건 및 더 복잡한 중첩 된 논리적, 쉽게 구성 및 쿼리 문자열의 표현, 오류가 발생하기 쉬운 때문 권장 복잡한 쿼리 에 의해 DSL의 JSON 형식으로 요청 본문의 내용을 대신.

 

  : DSL 두 가지 구성 요소가 DSL 쿼리 , DSL 필터를 .

  DSL의 DSL 필터 문 및 쿼리은 매우 유사하지만 그 목적은 다르다 :

  DSL 필터 (핀 포인트) 쿼리 문서는 더 동안 "예"또는 "아니오"내 조건에 대한 방법처럼 DSL 쿼리 (퍼지 쿼리)처럼 "어떻게이 좋아."

  

  성능에 DSL의 DSL 필터와 질의 차이 :

      결과는 여과에 의해 캐시 및 후속 요청에 적용 할 수 있습니다.

      쿼리와 일치하는 문서는, 상관은 더 많은 시간을 소비하고, 캐시하지 않습니다, 계산됩니다.

     효과적으로 쿼리를 만날 수있는 필터 문은 문서 필터링을 완료됩니다.

  원칙적으로, 사용 DSL 쿼리전체 텍스트 검색 또는 다른 필요 관련성 점수 장면이, 다른 하나는 DSL 모든 필터링.

 

2, DSL 문의 

  DSL 쿼리를 사용하여, 당신은 ES에 전달되는 매개 변수를 쿼리해야합니다.

  _search GET

  { "쿼리"YOUR_QUERY_HERE}

 

  일반적인 DSL 비교적 완전한 쿼리 :

itsource / 직원 / GET _search 

  {

   "쿼리를" : {

      "일치": { "섹스": "女" } 

  }

    [ "ID", "이름": "_source" ,]

   "에서": 20 ,

   "크기" : 10 ,

   "종류": [{ "join_date": "내림차순"}, { "나이": "ASC" }] 

  }

 

  선택 ID, 이름 t_user의 경우 ID 내림차순 한계 0,10에 의한 "% ㅎ %"순서와 같은 이름입니다.

  위의 질의를 대신 DSL은 : 결국 반환 직원의 성별 여성 직원을 발견하고 따라 연령의 오름차순, 내림차순 가입 제 21-30 데이터 (단지 이름, 나이, 이메일 필드를 반환)

3, DSL 필터 

  DSL과 DSL 및 정확한 쿼리 필터 문으로 퍼지 쿼리 쿼리.

2 0.0以上的用法
{   
"쿼리" : {    "부울" : { "해야" : [         { "일치": { "설명": "검색" }}       ], "필터" : { "용어": { " 나이 ":"12 " } }   }   }   "_source ":"ID ","이름 " ,    "20 " ,    "사이즈 "10 ,    "정렬 ": [{"join_date ":"DESC " }, { "나이": "ASC" }] }

 

4 사용하여 DSL 필터 쿼리

  ① 완전 일치 (match_all)

  일반 검색 (모든 문서를 일치) :

{
   "쿼리" : {
     "match_all" : {} 
  } 
}

  당신은 (모든 문서가 아닌 기본 쓰기의 붉은 부분에 필터) 필터를 사용해야하는 경우 :

{
   "쿼리" {
     "BOOL" {
       "필수" : [{
        "match_all" {} 
      },
       "필터" {} .... 
    } 
  } 
} 

  ② 표준 쿼리 (경기 및 multi_match)

  당신은 기본적으로 그것을 사용할 필요가 전체 텍스트 검색 또는 정확한 쿼리를해야하는지, 조회가 표준 쿼리입니다 일치합니다.

  당신은 전체 텍스트 검색어 검색 필드를 사용하는 경우 실제 쿼리하기 전에 쿼리 문자를 구문 분석 파서를 사용합니다 :

{
   "쿼리" : {
     "일치" : {
       "fullName의": "스티븐 킹" 
    } 
  } 
} 

  스티븐 킹은 위의 단어를 검색하고 포함하거나 스티븐 킹 문서를 찾은 다음 순위 점수를 줄 것이다.

  정확한 숫자, 날짜, 부울의 얼굴에, 지정된 값 또는 문자열로 다음 경기가 not_analyzed 경우, 그것은 당신을 위해 같은 당신에게 주어진 값을 검색합니다 :

{ "일치": { "나이": 20}}

{ "일치": { "날짜": "2016년 5월 1일를"}}

{ "일치": { "공개"진정한}}

{ "일치": { "태그": "full_text를"}}

  multi_match 쿼리가 동시에에서 쿼리와 일치하는 않는 여러 분야의 기초를 검색 할 수 있습니다 :

{
   "쿼리" : {
     "multi_match" : {
       "쿼리": "스티븐 킹" ,
       "필드": [ "fullName의", "제목" ] 
    } 
  } 
} 

  상기 동시 검색 및 매칭 fullName의 제목 필드.

  팁 : 일반적으로 단지 일반적으로 필터링에 사용하지 쿼리 텍스트 필드를 일치시키는 데 사용 일치합니다.

  ③ 단어 검색 및 필터 (계약 기간 및 조건 )

{
  "쿼리" : {
     "부울" : {
       "필수" : { 
         "match_all" : {} 
      },
       "필터" : { 
         "용어" : { 
           "나이": "20"  
        } 
      } 
    } 
  } 
} 

  용어 검색 및 필터

{
     "쿼리" : {
         "용어" : {
             "태그": [ "JVM", "하둡", "루씬" ,
             "minimum_match": 2 
        } 
    } 
}
        

  minimum_match : 히트 적어도 수, 기본 1

  ④ 복합 조건 검색 및 필터 (BOOL )

  불리언 조성물은 쿼리 조건을 포함하여, 질의 객체의 복수의 검색 질의와 결합 될 수있다 must_not해야하며,한다.

  예를 들어 : 1990년 6월 30일 이후에 태어난 게임이나 스포츠, 사람들처럼도 밥을 먹는에 관심이 조회,하지만. 범위 : 범위

{
   "쿼리" : {
     "부울" : {
       "필수": [{ "용어": { "취미": "吃米饭" }}],
       "은해야": [{ "용어": { "취미": "游戏" }}, 
         { "용어 "{"취미 ":"运动" }} 
      ]
       "must_not " : [ 
        { "범위 "{"birth_date "{"LT ":"1990년 6월 30일 " } }} 
      ,
         "필터" [...]
      "minimum_should_match"1 
    } 
  } 
}

  팁 : BOOL 문의 아래에는 절 필수가 없다면, 적어도 절을해야이 있어야합니다. 그러나이 필수 절 경우 절은 쿼리 할 수 ​​없습니다.  

  ⑤ 범위 쿼리 및 필터 (레인지 )

  범위 필터는 지정된 범위에 따라 데이터의 그룹을 찾기 위해 우리가 할 수 있습니다 :

{
   "쿼리" {
     "범위" {
       "나이" {
         "GTE"20 ,
         "LT": 30 
      } 
    } 
  } 
}

  이 예는 이전의 20 같고 30보다 쿼리합니다.

  있다 :> GTE :> = LT <LTE <=

  

  ⑥ 필터의 유무 (있는 누락 )

{
   "쿼리" {
     "BOOL" {
       "필수" : [{
         "match_all" {} 
      },
       "필터" {
         "존재"{ "필드": "GPS" } 
      } 
    } 
  } 
}

  팁 : 존재 만 결과를 필터링 할 수가 없습니다.

 

  ⑦ 검색 및 필터 (프리픽스 매칭 전에 )

  그리고 유사한 용어 쿼리, 검색은 정확한 경기 전에 일치하지만, '키 %'와 같은 SQL에서 유사하지 않다

{
   "쿼리" : {
     "앞에" : {
       "fullName의": "黄를" 
    } 
  } 
}

  즉 모든 쿼리 별명으로 황에 대한 예입니다.

 

  ⑧ 와일드 카드 검색 (와일드 카드 )

  * 0 ~ N를 들어, 한을 대신?에 사용합니다.

{
   "쿼리" : {
     "와일드 카드" : {
       "fullName의": "文*华" 
    } 
  } 
}

 

추천

출처www.cnblogs.com/wanghj-15/p/11310595.html