2015-01-30 2 views
0

탄성 검색에서 우리는 다른 값을 가진 문서를 가지고 있습니다. 각 값에는 마침표가 있습니다. 기간은 값이 실제로 있는지 알려주고 값의 실제 기간을 알려줍니다. 울부 짖는 소리탄성 검색 - 최신 날짜로 필터 값

예 : 우리의 쿼리에서

"": [ 
{ 
    "memberType": user, 
    "period": { 
    "validFrom": "1964-08-23", 
    "validTo": "2008-12-31" 
    }, 
}, 
{ 
    "memberType": admin, 
    "period": { 
    "validFrom": "2008-12-31", 
    "validTo": null 
    } 
} 
] 

, 나는 memberType에 의해 필터링 할. 그러나 가장 새로운 유형의 회원만을 다루고 있습니다. 따라서 memberType "user"로 필터링하면 실제 memberType이 admin이기 때문에 위의 문서는 일치하지 않아야합니다.

위의 예에서 memberType에 의한 부울 필터로 필터링 할 수 있었고 은 유효하지 않음 필드에 필드가 누락되었습니다.

하지만 사람이 더 이상 유효하지 않은 경우 두 사람 모두 validTo 날짜가 정의되어 있으므로 최신 날짜를 살펴야합니다.

어떻게하면됩니까? 중첩 된 쿼리 또는 사용자 지정 스크립트 필터를 생각 중입니다. 하지만 쿼리를 표현하는 방법을 모른다. 사전

답변

0

에서

덕분에이 배열에 대한 필드 이름이 memberDetails 것을 제공, 당신은 당신이 필요 달성하기 위해이 쿼리를 사용할 수 있습니다.

{ 
    "query" : { "match_all" : {} }, 
    "filter" : { 
     "nested" : { 
      "path" : "memberDetails", 
      "filter" : { 
       "bool" : { 
        "must" : [ 
         { 
          "term" : {"memberType" : "user"} 
         }, 
         { 
          "missing" : { "field" : "validTo" } 
         } 
        ] 
       } 
      } 
     } 
    } 
} 
+0

감사합니다. Vishal. 하지만 답변이 완전하지 않습니다. 주어진 예제는 "validTo"필드가 누락 된 경우에만 리턴합니다. 하지만 그 필드가 모든 경우에 없어지지 않는 경우도 있는데, validTo에 날짜 값이 있고 최신 날짜를 찾아야하는 경우가 있습니다. 예 : ''[ { "memberType"사용자 "기간": { "validFrom": "1964년 8월 23일" "validTo": "2008-12-31" }, }, { "memberType"관리자, "기간": { "validFrom": "2008-12-31", "validTo": "2012-04-30" } } ] –