2013-11-22 4 views
0

전자 상거래 웹 사이트에 elasticsearch를 사용하여 패싯 탐색을 작성하려고합니다.resultset에서 elasticsearch 중첩 된 객체의 값 얻기

상점 제품에는 여러 가지 변형이있을 수 있습니다. 생각한 문서 구조는 다음과 같습니다.

PUT /products_test/product/1 
{ 
    "id": "1", 
    "manufacturer": "foobar", 
    "categories": [ 
        "28554568", 
        "28554577", 
        "28554578" 
    ], 
    "variants": [ 
    { 
     "id": "1_a", 
     "color": "blue", 
     "size": "L" 
     "price": "67.99" 
    }, 
    { 
     "id": "1_b", 
     "color": "red", 
     "size": "L" 
     "price": "69.99" 
    } 
    ] 
} 

변형을 중첩 형식으로 정의했습니다. 다음 쿼리는 필터와 일치하는 변형이 포함 된 모든 문서 반환이 방법 : 이제

POST /products_test/product/_search 
{ 
    "query": { 
    "filtered": { 
     "query": {"match_all": {}}, 
     "filter": { 
      "and": [ 
      {"term": {"categories": "28554568"}}, 
      {"terms": { 
       "variants.color": [ 
       "red" 
       ] 
      }} 
      ] 
     } 
    } 
    } 
} 

, 난 정말 제품의 변형을 표시하기 위해 필터를 일치 변형의 ID를 좀하고 싶습니다 카테고리 페이지에 있습니다. 따라서 예제의 경우 두 번째 변형 ID (1_b)를 반환하고 싶습니다. 결과 집합에 반환 된 문서의 ID 만 가져옵니다. 중첩 된 객체의 값을 반환하는 방법을 정의 할 수 있습니까?

답변

1

현재 쿼리와 일치하는 중첩 된 문서를 가져올 방법이 없습니다. 그것은 known issue이고 그것을 고치기 위해 작업/생각이 주어졌습니다. 현재 문제는이 기능을 지원하기 위해 Elasticsearch의 가져 오기 단계를 리팩토링해야한다는 것입니다.

리팩토링은 탄성 검색의 다른 부분에도 도움이되기 때문에 중요하지만 실제로 발생합니다.하지만 중요한 리펙터입니다. 사용할 수있는 시점에 대한 현재 ETA가 없습니다.

각 변형에 "루트 개체"데이터가 포함되도록 데이터 비정규 화를 고려한 다음 클라이언트 내부에서 그룹화를 수행하는 것이 좋습니다.

또는, 상위/하위 매핑을 조사 할 수 있지만, 유사한 제한 사항이 적용됩니다 (A has_child 쿼리와 일치하는 자녀를 확인할 수 없습니다),하지만 아이가

+0

감사를 검색 할 수있는 독립적 인 문서이기 때문에 그것은 좀 더 많은 유연성을 제공 않습니다 정보 – user1036651

관련 문제