2017-04-26 1 views
0

사용자가 확인란을 선택하고 elasticSearch 쿼리를 작성할 수있는 코드가 이미 있습니다 (java/spring). 지금까지는 여러 카테고리의 용어가 AND 쿼리 여야하므로 조건 일치 (OR 쿼리)를 작성한 후 계층화 된 선택 상자를 반복하여 결합하여 이 라인을 따라 부울 용어 쿼리용어 쿼리에서 여러 필드를 시뮬레이트하는 방법

{ 
"bool" : { 
    "must" : [ { 
    "terms" : { 
     "field1" : [ "term1", "term2" ] 
    } 
    }, { 
    "terms" : { 
     "field2" : [ "term3" ] 
    } 
    } ] 
} 

내가

{ 
"query": { 
    "bool" : { 
    "must" : { 
     "terms" : { "field1" : ["term1"] , "field1" : ["term2"] } 
    } 
    } 
} 

}

의 라인을 따라 뭔가를해야 이러한 경우에, 그래서 새로운 요구 사항은 최고 수준의 상자 또는 쿼리의 일부를 만들기 위해이 있었다

티 나는 내가 필터 쿼리에이 이동해야 같은데요

"type": "query_parsing_exception", 
"reason": "[terms] query does not support multiple fields",... 

오류를 얻을 수 있지만, 사람이 가장 간단한 가장 효과적이라는 것을 확인 할 수 있다면 내가 궁금해으로의 내가 가정 (elasticSearch 2.4.1) 수 없습니다 변경 (이 단계에서 나는 최소한의 변화의 길을 찾고있다)? 이와

+1

이유는 단순히 should''에'must'을 변경하지 첫 번째 쿼리에서? – Val

+0

아쉽게도 쉬웠습니다. 나는 올바른 페이지를 열어 놓았습니다. 용어를 사용해야한다면 조금 신경이 쓰였습니다. 당신이 대답을 넣을 수 있거나, 내가 좋아할만한 포럼처럼 너무 간단하다면 ... (덕분에) – gringogordo

답변

0

솔루션은 단순히 당신의 첫 번째 쿼리에 must 대신 should을 사용하는 것입니다

{ 
"bool" : { 
    "should" : [ {     <---- change this 
    "terms" : { 
     "field1" : [ "term1", "term2" ] 
    } 
    }, { 
    "terms" : { 
     "field2" : [ "term3" ] 
    } 
    } ] 
} 
0

시도 : -

{ 
    "query": { 
     "bool": { 
      "must": [{ 
        "term": { 
         "field1": "1" 
        } 
       }, 
       { 
        "term": { 
         "field12": "1" 
        } 
       } 
      ] 
     } 
    } 
} 
+0

감사합니다. 이것은 여전히 ​​AND 쿼리입니다. Val이 언급 한 대답은 내가 생각하는대로 ... 사용해야합니다. – gringogordo

관련 문제