2014-05-13 5 views
1

나는 ElasticSearch에서 어려움을 겪고있다. 사실 두 개의 쿼리가 있지만 첫 번째는 작동하지만 두 번째 쿼리는 그렇지 않습니다. 모든 항목을 잡아, 그래서 기본적으로ElasticSearch 중첩 된 [AND OR] 필터

{ 
    "query": { 
     "filtered": { 
      "query": { 
       "match_all":{} 
      }, 
      "filter": { 
       "and": [{ 
        "term":{ 
         "relatedID":"214" 
        } 
       }, 
       { 
        "term":{ 
         "relatedType":"deal" 
        } 
       }] 
      } 
     } 
    } 
} 

을 : 여기

괜찮 기초 1 쿼리입니다 (쿼리가 실제로는 이것보다 상당히 더 큰, 내가 이해를 돕기 위해 아래로 제거했습니다) 어디 relatedID의 == 214 & & relatedType는 == "거래"그러나

, 나 또한 할 싶은 것, 이것이다 :

{ 
    "query": { 
     "filtered": { 
      "query": { 
       "match_all":{} 
      }, 
      "filter": { 
       "and": [{ 
        { 
         "or":[{ 
           "and":[{ 
            "relatedID":"528" 
           }, 
           { 
            "relatedType":"company" 
           }] 
          },{ 
           "and":[{ 
            "relatedID":"214" 
           }, 
           { 
            "relatedType":"deal" 
            } 
            ]} 
          ]} 
         ]} 
        } 
       }     
      } 
     } 
    } 
} 

S 기본적으로 모든 거래를 214, 또는 회사와 528을 잡아라.

이것은 내가 붙어있는 것처럼 보인다.

{ 
"query":{ 
    "filtered":{ 
     "query":{ 
      "match_all":{} 
     }, 
     "filter":{ 
      "and":[ 
       { 
        "or":[ 
         { 
          "term":{ 
           "timeSensitive":false 
          } 
         } 
         , 
         { 
          "range":{ 
           "validTo":{ 
            "gt":"20140513T153030Z" 
           }, 
           "validFrom":{ 
            "lt":"20140513T153030Z" 
           } 
          } 
         } 
         ] 
        } 
        , 
        { 
         "term":{ 
          "categoryTree.NAME":"Promotions" 
         } 
        } 
        , 
        { 
         "or":[ 
          { 
           "and":[ 
            { 
             "relatedID":"528" 
            } 
            , 
            { 
             "relatedType":"company" 
            } 
           ] 
          } 
          , 
          { 
           "and":[ 
            { 
             "relatedID":"214" 
            } 
            , 
            { 
             "relatedType":"deal" 
            } 
            ] 
          } 
         ] 
        } 
        , 
        { 
         "terms":{ 
          "permissions": ["member","supplier"] 
         } 
        } 
        , 
        { 
         "term":{ 
          "siteID":6 
         } 
         } 
        ] 
       } 
      } 
      } 
     } 
    } 

}

+0

는 bool' 필터는'ES 설명서에서 권장하는 대신한다 '알고 있나요 및'및'필터? –

답변

3

구문 :

내가 말했듯이, (I 위를 구조하려고 한 이유를 이해 도움이 될 수 아래의 전체 쿼리를 참조) 쿼리에 더 많은있다 문제는 당신이 (그리고, 또는) 필터 안에 필터라는 용어를 언급하지 않았다는 것입니다.

부울 필터를 사용하고 (및/또는) 필터보다 더 빠른 쿼리를 시도하십시오.

[AND OR] 내가 부울 필터에 변환

{ 
"query": { 
    "filtered": { 
    "query": { 
     "match_all": {} 
    }, 
    "filter": { 
     "and": [ 
      { 
       "or": [ 
       { 
        "and": [ 
         { 
          "term": { 
          "relatedID": "528" 
          } 
         }, 
         { 
          "term": { 
          "relatedType": "company" 
          } 
         } 
        ] 
       }, 
       { 
        "and": [ 
         { 
          "term": { 
          "relatedID": "214" 
          } 
         }, 
         { 
          "term": { 
          "relatedType": "deal" 
          } 
         } 
        ] 
       } 
       ] 
      } 
     ] 
    } 
    } 
    } 
    } 

같은 쿼리를 필터링

curl -XPOST "http://localhost:9200/try/_search" -d' 
{ 
"query": { 
"filtered": { 
    "query": { 
    "match_all": {} 
    }, 
    "filter": { 
     "bool": { 
      "should": [ 
       { 
        "bool": { 
         "must": [ 
         { 
          "term": { 
           "relatedID":"528" 
          } 
         }, 
          { 
          "term": { 
           "relatedType":"company" 
          } 
         } 
         ] 
        } 
       }, 
       { 
        "bool": { 
         "must": [ 
         { 
          "term": { 
           "relatedID":"214" 
          } 
         }, 
          { 
          "term": { 
           "relatedType":"deal" 
          } 
         } 
         ] 
        } 
       } 
      ] 
     } 
    } 
} 
} 
}' 
+0

예 - 내 실수. 구조체 작성시 올바르지 않습니다! – Tom

관련 문제