2013-11-22 9 views
4

SOLR 및 SQL 데이터 가져 오기에 어려움을 겪고 있습니다. 두 테이블에서 오는 데이터를 인덱싱해야합니다. 첫 번째 테이블은 "마스터"이고 두 번째 테이블은 "세부 정보"입니다. 이 두 테이블 간의 관계는 1에-N이며이 두 테이블에 콜 럼에 의해 현재 m_id 적용됩니다 :SOLR DataImportHandler, 중첩 된 엔터티를 JSON 배열로 처리하는 방법

CREATE TABLE "masters" (m_id    NUMBER(10), 
         m_code   VARCHAR2(100 CHAR), 
         m_description VARCHAR2(1000 CHAR), 
         PRIMARY KEY (m_id)); 

CREATE TABLE "details" (d_id    NUMBER(10), 
         s_code   VARCHAR2(100 CHAR), 
         s_description VARCHAR2(1000 CHAR), 
         m_id    NUMBER(10), 
         PRIMARY KEY (d_id), 
         CONSTRAINT fk_details_masters FOREIGN KEY (m_id) REFERENCES "masters"(m_id)); 

나는 "마스터"테이블마다에 존재하는 각 행에 대해 인덱스 첨부 문서를 가지고 싶습니다 문서에는 "details"테이블의 ARRAY가 포함되어야합니다.

내 마음에 예시되어 결과는이 같은 것입니다 :

master = { 
"ID": "1" 
"m_code": "master53", 
"m_description": "John Doe", 
"details": [ 
       { 
       "d_code": "detail001", 
       "d_description": "Shirts" 
       }, 
       { 
       "d_code": "detail002", 
       "d_description": "Shoes" 
       }, 
       { 
       "d_code": "detail003", 
       "d_description": "hats" 
       } 
      ] 
} 

하지만은이 같은 생산할 수있어이 같은 구성을 사용

master = { 
"ID": "1", 
"m_code": "master53", 
"m_description": "John Doe", 
"d_code": ["detail001","detail002","detail003"], 
"d_description": ["Shirts","Shoes","hats"] 
} 

을 :

<dataConfig> 
    <dataSource type="JdbcDataSource" 
       driver="oracle.jdbc.driver.OracleDriver" 
       url="jdbc:oracle:thin:@//dora64svil.icc.crifnet.com:1521/cbrisvil.dbcrif.net" 
       user="CBBTC" 
       password="w4.gJ6Qf1p7Z_i4qFp3W_d"/> 
    <document> 
    <entity name="master" rootEntity="True" 
      query="SELECT m_id, m_code, m_description from master"> 
     <field column="m_id" name="ID"/> 
     <field column="m_code" name="m_code_s"/> 
     <field column="m_description" name="m_description_s"/> 
     <entity name="details" rootEntity="False" 
       query="SELECT d_code, d_description from details where = m_id '${master.m_id}'"> 
      <field column="d_code" name="d_code_ss"/> 
      <field column="d_description" name="d_description_ss"/> 
     </entity> 
    </entity> 
    </document> 
</dataConfig> 

구성 및 schema.xml 필드 정의가 많이 사용되었지만 f 적절한 길을 인도하십시오. (필드 접미사 "_s"와 "_ss"는 스키마에 적절한 필드 유형을 트리거하기 위해 존재합니다.)

내가하려는 것은 중첩 된 엔티티에 "이름"을 부여하는 것입니다. 오류입니까? 나는 개념 상으로는 잘못된 것을 시도하고 있습니까?

답변

0

SOLR 오늘의 중첩 된 데이터를 검색 지원하지 않습니다의 schema.xml에서 진정한 다중 값 = 같은 필드를 설정해야합니다.

가장 좋은 방법은 fq=_root_:<your_id> 및 결과 그룹화를 사용하는 것입니다.

결과 그룹핑을 수행하려면 type_s라고 말하고 'Master'또는 'details'값을 각각 TemplateTransformer를 사용하여 지정해야합니다.

당신이 좋아하는 것 달성 할 것이다 출력,

"groupValue":master, 
doc: { 
"ID": "1" 
"m_code": "master53", 
"m_description": "John Doe", 
} 

"groupValue":"details", 
"docs": 
       { 
       "d_code": "detail001", 
       "d_description": "Shirts" 
       }, 
       { 
       "d_code": "detail002", 
       "d_description": "Shoes" 
       }, 
       { 
       "d_code": "detail003", 
       "d_description": "hats" 
       }