2017-11-07 2 views
1

의 특정 위치에 대한 쿼리 나는이 같은 문서를 가진 ES 지수가 :ElasticSearch : 중첩 된 목록

[{"type": "alpha", "order": ['john', 'michael', 'tony']}] 
[{"type": "alpha", "order": ['michael', 'john', 'tony']}] 
[{"type": "beta", "order": ['michael', 'john', 'tony']}] 
내 쿼리는 "유형"여기서 "알파"와 인 레코드를 반환해야

" john "이"주문 "목록의 두 번째 위치에 있습니다. 나는 중첩 된 쿼리를 시도했지만 "유형"의 최상위 조건과 결합 할 수없는 것 같습니다. 어떤 힌트라도 환영합니다.

답변

1

현재 매핑으로는이 작업을 수행 할 수 없습니다.

는이 같은 데이터를 형성해야한다 :

[{"type": "alpha", "order": {"1":"john", "2":"michael", "3":"tony"]}] 

또는 같은

:

[{"type": "alpha", "order": [{"rank":1,"name":"john"}, {"rank":2,"name":"michael"}, {"rank":3, "name":"tony"}]}] 

두 번째 솔루션은 덜 효율적이다 중첩 된 "순서"중첩 된 쿼리를 필요로하지만 경우 많은 주문을 받았으므로 더 좋은 해결책이 될 수 있습니다. mapping explosion.

+0

매우 도움이됩니다. 나는 그것을 "계급"을 포함하도록 수정할 수 있고 다음은 작동해야합니다. 쿼리 = { "쿼리": { 는 "중첩": { "경로": "순서", "쿼리"이를 "유형"제약 조건을 추가하는 방법하지만 여전히 나에게 분명하지 않다 { "부울": { "필수": [{ "일치": { "순위"2 }} ] } } } } } 조회에 고정 – dust

+1

: { " 검색어 ": { "bool ": { "필수 ": [{ 가"중첩 ": { "경로 ":"순서 ", "쿼리 ": { "일치 ": { "order.rank ": 2 } } } 는}, { "일치": { "유형": "알파" } }] } } } 가 중첩 된 필드 "order.rank"에주의, 당신은 전체 경로를 제공 할 수있어 다시. –