2017-10-30 6 views
0

elasticsearch 쿼리로이 SQL 쿼리를 어떻게 변환해야합니까?elasticsearch 필터/쿼리에 여러 bool 절이 있습니다.

SELECT * FROM myTable WHERE (id = 99 AND isonline <> 1) OR (id = 98 AND isonline <> 0) 

여러 개의 불 필터가있는 쿼리는 어떻게 만듭니 까? (보너스는 NEST에서 수행하는 방법도 보여줄 것입니다.)

중복 객체 키가 포함되어있어 신축성있는 쿼리가 작동하지 않습니다.

{ 
    "size": 1000, 
    "query": { 
     "match_all": {} 
    }, 
    "filter": { 
     "bool": { 
      "must": [ 
       { 
        "term": { 
         "id": 99 
        } 
       } 
      ], 
      "must_not": [ 
       { 
        "term": { 
         "isonline": true 
        } 
       } 
      ] 
     }, 
     "bool": { 
      "must": [ 
       { 
        "term": { 
         "id": 98 
        } 
       } 
      ], 
      "must_not": [ 
       { 
        "term": { 
         "isonline": false 
        } 
       } 
      ] 
     }   
    } 
} 

elasticsearch 버전 1.7

+0

은 나 또는'WHERE' 문 이해가되지 않는가요? '(id = 99 AND isonline <> 1) AND (id = 98 AND isonline <> 0)'id는 99와 98 모두입니다 ... –

+0

@AndreiStefan 당신이 옳다는 점에 유감입니다. 'OR'을 사용하여 'OR'을 사용하여 쿼리를 편집했습니다. 기본적으로 ID와 isonline 상태와 일치 시키려고합니다. 찾으려는 각 항목에 대해 이러한 조건을 갖습니다. – darren

+0

Hehe, 이제 이해가됩니다. 내 대답을 업데이트했습니다. –

답변

0
{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "bool": { 
      "must": [ 
       { 
       "term": { 
        "id": 99 
       } 
       }, 
       { 
       "term": { 
        "isonline": false 
       } 
       } 
      ] 
      } 
     }, 
     { 
      "bool": { 
      "must": [ 
       { 
       "term": { 
        "id": 98 
       } 
       }, 
       { 
       "term": { 
        "isonline": true 
       } 
       } 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 
+0

쿼리에서 0 개의 조회가 반환됩니다. 내 부울 조건 중 하나를 제거하면 적어도 1 개의 결과를 얻습니다. 하지만 반드시 내부에 1 개 이상의 불량 조건이 있으면 작동하지 않습니다. – darren

+0

게시물에서 내 질문에 답변 할 수 있습니까? \t 나 또는 귀하의 WHERE 구문이 맞지 않습니까? '(id = 99 AND isonline <> 1) AND (id = 98 AND isonline <> 0)'id는 99와 98 모두입니다. 실제로 찾고있는 것은 무엇입니까? –