2016-06-07 2 views
0

예를 들어 field1, field2field3과 같이 3 개의 필드가 있습니다.필터 또는 부울이있는 ElasticSearch 쿼리

if { field1 != 1 AND field2 != 1 AND field3 != 1 } OR if { field1 != 2 AND field2 != 2 AND field3 != 2 }

내가 두 boolquery 통해 그것을하려고 노력하지만, 나에게 아무 것도 반환하지 않습니다 : 나는 이런 식으로 뭔가를 만들어야합니다. 그런 다음이 쿼리를 하나의 filter에 랩핑하려했지만 항상 no query defined for [filter]] 예외를 throw합니다. 그러나이 필터의 boolquery은 항상 비어 있으며 아무 것도 반환하지 않습니다. 이 결과에 boolquery을 추가하여 모든 결과를 검색 한 다음 필터링 할 수 있습니까? 아니면 다른 방법으로 쿼리를 작성해야하지만 어떻게해야합니까? 여기

+0

실행중인 ES 버전은 무엇 할 수있는 방법은? – Val

+0

@Val ES 버전 1.5.2 – Squeez

답변

1

은 당신이

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "or": [ 
      { 
      "and": [ 
       { 
       "not": { 
        "term": { 
        "field1": "1" 
        } 
       } 
       }, 
       { 
       "not": { 
        "term": { 
        "field2": "1" 
        } 
       } 
       }, 
       { 
       "not": { 
        "term": { 
        "field3": "1" 
        } 
       } 
       } 
      ] 
      }, 
      { 
      "and": [ 
       { 
       "not": { 
        "term": { 
        "field1": "2" 
        } 
       } 
       }, 
       { 
       "not": { 
        "term": { 
        "field2": "2" 
        } 
       } 
       }, 
       { 
       "not": { 
        "term": { 
        "field3": "2" 
        } 
       } 
       } 
      ] 
      } 
     ] 
     } 
    } 
    } 
} 
+0

저에게 적합하지 않습니다. 아무것도 찾지 못했습니다. 아마도 1.5.2 ES를 사용하기 때문일 수 있습니까? – Squeez

+0

@Squeez 인덱스 매핑을 공유 할 수 있습니까? 그리고 당신이 부정하려는 실제 값을 공유 할 수 있습니까? (나는 1과 2가 아닌 것 같아요). –