2017-04-04 1 views
0

Solr 사용 5.2.1Solr은 부모 당 여러 유형의 중첩 된 문서를 지원합니까?

부모가 여러 유형의 중첩 된 문서를 갖거나 상위 문서 당 하나의 유형의 하위 문서 일 수 있습니까?

그래서 예를 들어

gathering: { 
    location: { name: "The park", city: "New York", country: "United States Of America", ...} 
    people: [ 
     { first_name: "John", last_name: "Smith", age: 21, ... }, 
     { first_name: "Jane", last_name: "Doe", age: 19, ...} 
    ] 
} 

그것은 SOLR의 5.2.x 이상과 함께 할 수 있습니까?

답변

1

네, 다양한 유형의 하위 문서에는 제한이 없습니다. 이는 block-indexingBJQ을 통해 이루어질 수 있습니다. 하위 문서를 검색하기 위해서는 child-transformation을 사용할 수 있습니다.

색인 표현을 요약하면 색인 블록의 개념을 상기시켜 드리겠습니다. SOLR/루씬은 기본 중첩 된 구조를 제공하지 않습니다 - 그들은 평면 패션 (차례로)에 순차적으로 문서를 저장하는 :

Simple Index Block representation

컬렉션에서 간단한 문서 D0/D5 스탠드, D1, D2, D3, D4가 포함되어 자신의 인덱스 블록 . Lucene/Solr은 여러 문서를 하나의 블록으로 색인화하는 수단을 제공합니다 : IndexWriter#addDocuments().

Solr/Lucene이 실제로 이러한 블록과 함께 할 수있는 것 - 중첩 된 구조 관계를 모방합니다. 이러한 관계를 실현하려면 문서를 구분할 수있는 특수 분야를 도입해야합니다. 이제 type을 가정 해 봅시다 - 어떤 유형의 문서입니다 : 그것은 gathering (부모), location (아이, 1 형) 또는 people (아이, 2 형) 여부 :

Block Join visual representation

그래서 인덱스를 접선 후 -time 당신은 같은 떨어지게를 발급해야합니다 :

  1. q={!parent which="type:gathering"}first_name:J*은 (의 당신이 사람의 first_name에 의해 일치한다고 가정하자). 결과 집합에서만 부모 문서를 얻을 수 있습니다.
  2. 어린이 문서를 검색하려면 앞서 말한대로 child-transformer을 제공 할 수 있습니다. fl=id,[child parentFilter=type:gathering limit=100].
  3. 유일한 제한 사항은 여기에서 확인할 수 있습니다. location을 단일 엔티티로 모델링하고 people을 JSON 배열로 그룹화 할 수 없습니다. 이는 사용자 정의 응답 작성자를 개발할 경우 가능할 수 있지만 너무 복잡하고 비즈니스 시나리오에 맞지 않을 수도 있습니다.
+0

SolrJ 라이브러리를 사용할 수 있는지 알고 계십니까? 내 Solr 모델에서 하나 이상의 자식 (annotation @Field (child = true))을 가질 때 '하나의 Field with child = true'를 가질 수 없습니다. – doublemc

관련 문제