2014-02-18 1 views
0

나는 다음과 같은 한 서류 :중첩 된면 검색

(1) { date:"2013-01-01", person:"John", activity:"swimming" } // <-- watch out date/year 
(2) { date:"2014-01-02", person:"John", activity:"cycling" } 
(3) { date:"2014-01-03", person:"John", activity:"jogging" } 
(4) { date:"2014-01-01", person:"Paul", activity:"swimming" } 
(5) { date:"2014-01-02", person:"Paul", activity:"cycling" } 
(6) { date:"2014-01-03", person:"Paul", activity:"jogging" } 
(7) { date:"2014-01-01", person:"Ringo", activity:"swimming" } 
(8) { date:"2014-01-02", person:"Ringo", activity:"cycling" } 
(9) { date:"2014-01-03", person:"Ringo", activity:"climbing" } // <-- watch out activity 

indexedstored 모든 필드를 가정합니다.

는 지금은 swimmingANDcycling하지만 NOTjogging (2014의 모든)을 한 모든 사람을 찾고 싶어요. 정답은 물론 Ringo이어야합니다. 솔루션은 중첩 된 패싯 검색이 될 것이라고 생각하지만 확신 할 수 없으며 방법을 알지 못합니다.

+0

일반적인 쿼리 인 경우 비 활동을 인덱싱하는 것도 고려해야합니다. '비 활동 : 조깅'과 같은 필드. 색인 측면에서 가능한 한 많은 작업을 수행하여 질의 측면을 더 빠르고 깨끗하게 만듭니다. – Risadinha

답변

0

편집 : 좋아, 이제 이해할 수 있습니다. '수영과 사이클링'은 Lucene AND를 의미합니다. 그럼 이건 유효하지 않습니다.

그런 다음, 이것에 대해, 당신은 activity:(swimming) AND date:[2014-01-01T00:00:00.000Z TO 2014-12-31T23:59:59.999Z]를 조회 할 수 있으며, 다음 facetting을 사용하는 방법 : facet=on&facet.query=activity:cycling&facet.query=activity:jogging을 그냥면 조깅에 자전거면에있는 값을 유지하지만.

클라이언트 측 코드가 약간 필요하지만 작동해야합니까?

+0

이 문서 2,4,5,7,8 및 9를 다시 돌려주지 않겠습니까? 이것은 원했던 대답'Ringo'에서 멀리 떨어져 있습니다 ... – heinob