2012-04-16 5 views
0

방금 ​​solr을 배우기 시작했습니다. 나는 아파치 톰캣 서버와 solr 3.5를 설치했다. 하나의 엔티티에 대한 오라클 데이터베이스에서 데이터를 검색하기위한 solr을 성공적으로 구성했습니다. 내가 구성이 같은 내 데이터-config.xml 파일을 데이터-config.xml에 두 개의 엔티티를 추가하고 SOLR의 schema.xml.I에 필드를 추가하고 때 나는solr에서 여러 엔터티를 선언하는 동안 오류가 발생했습니다.

<dataConfig> 
    <dataSource name="JdbcDataSource" 
     driver="oracle.jdbc.driver.OracleDriver" 
     url="jdbc:oracle:thin:@//192.168.1.3:1521/orcl" 
     user="SSOHANI" 
     password="Ssohani123"/> 

    <document name="doc"> 
     <entity name="PROJECTS" 
       query="select PROJECTS.ID, PROJECTS.BATCH_ID, PROJECTS.OPERATION, PROJECTS.NAME, 
       PROJECTS.DESCRIPTION, PROJECTS.ESTIMATED_COST, PROJECTS.GRANTOR_AGENCY_ID, 
       PROJECTS.GRANTEE_AGENCY_ID, PROJECTS.PROJECT_STATUS_ID, 
       PROJECTS.PROJECT_TYPE_ID, PROJECTS.START_DATE, PROJECTS.END_DATE, 
       NVL(PROJECTS.TRACS_PARENT_PROJECT_ID,0) TRACS_PARENT_PROJECT_ID, 
       NVL(PROJECTS.STATE_PARENT_PROJECT_ID,0) STATE_PARENT_PROJECT_ID, 
       NVL(PROJECTS.PLAN_ID,0) PLAN_ID, 
       NVL(PROJECTS.PLAN_ID_TYPE,0) PLAN_ID_TYPE, 
       NVL(PROJECTS.TRACS_ID,0) TRACS_ID, 
       NVL(PROJECTS.STATE_ID,0) STATE_ID, 
       PROJECTS.VALID, PROJECTS.APPLIED, 
       NVL(PROJECTS.COMMENTS,'NULL') COMMENTS, 
       PROJECTS.GENERATED_PLAN_ID, PROJECTS.TRACS_PROJECT_ID, 
       PROJECTS.STATE_PLAN_ID from SSOHANI.PROJECTS" > 

     <field column="ID" name="projects_id" /> 
     <field column="BATCH_ID" name="projects_batch_id" /> 
     <field column="OPERATION" name="projects_operation" /> 
     <field column="NAME" name="projects_name" /> 
     <field column="DESCRIPTION" name="projects_description" /> 
     <field column="ESTIMATED_COST" name="projects_estimated_cost" /> 
     <field column="GRANTOR_AGENCY_ID" name="projects_grantor_agency_id" /> 
     <field column="GRANTEE_AGENCY_ID" name="projects_grantee_agency_id" /> 
     <field column="PROJECT_STATUS_ID" name="projects_project_status_id" /> 
     <field column="PROJECT_TYPE_ID" name="projects_project_type_id" /> 
     <field column="START_DATE" name="projects_start_date" /> 
     <field column="END_DATE" name="projects_end_date" /> 
     <field column="TRACS_PARENT_PROJECT_ID" name="projects_tracs_parent_project_id" /> 
     <field column="STATE_PARENT_PROJECT_ID" name="projects_state_parent_project_id" /> 
     <field column="PLAN_ID" name="projects_plan_id" /> 
     <field column="PLAN_ID_TYPE" name="projects_plan_id_type" /> 
     <field column="TRACS_ID" name="projects_tracs_id" /> 
     <field column="STATE_ID" name="projects_state_id" /> 
     <field column="VALID" name="projects_valid" /> 
     <field column="APPLIED" name="projects_applied" /> 
     <field column="COMMENTS" name="projects_comments" /> 
     <field column="GENERATED_PLAN_ID" name="projects_generated_plan_id" /> 
     <field column="TRACS_PROJECT_ID" name="projects_tracs_project_id" /> 
     <field column="STATE_PLAN_ID" name="projects_state_plan_id" /> 

     </entity> 

    <entity name="PLANS" 
      query="select PLANS.ID, PLANS.BATCH_ID, PLANS.OPERATION, PLANS.NAME, PLANS.DESCRIPTION, 
       PLANS.CONTACT_ID, PLANS.PLAN_TYPE_ID, PLANS.AGENCY_ID, PLANS.START_DATE, 
       NVL(PLANS.END_DATE,0) END_DATE, 
       NVL(PLANS.TRACS_PARENT_PLAN_ID,0) TRACS_PARENT_PLAN_ID, 
       NVL(PLANS.STATE_PARENT_PLAN_ID,0) STATE_PARENT_PLAN_ID, 
       NVL(PLANS.TRACS_ID,0) TRACS_ID, 
       NVL(PLANS.STATE_ID,0) STATE_ID,   
       PLANS.VALID, PLANS.APPLIED, 
       NVL(PLANS.COMMENTS,'NULL') COMMENTS from SSOHANI.PLANS" > 

     <field column="ID" name="plans_id" /> 
     <field column="BATCH_ID" name="plans_batch_id" /> 
     <field column="OPERATION" name="plans_operation" /> 
     <field column="NAME" name="plans_name" /> 
     <field column="DESCRIPTION" name="plans_description" /> 
     <field column="CONTACT_ID" name="plans_contact_id" /> 
     <field column="PLAN_TYPE_ID" name="plans_plan_type_id" />  
     <field column="AGENCY_ID" name="plans_agency_id" /> 
     <field column="START_DATE" name="plans_start_date" /> 
     <field column="END_DATE" name="plans_end_date" /> 
     <field column="TRACS_PARENT_PLAN_ID" name="plans_tracs_parent_plan_id" /> 
     <field column="STATE_PARENT_PLAN_ID" name="plans_state_parent_plan_id" /> 
     <field column="TRACS_ID" name="plans_tracs_id" /> 
     <field column="STATE_ID" name="plans_state_id" /> 
     <field column="VALID" name="plans_valid" /> 
     <field column="APPLIED" name="plans_applied" /> 
     <field column="COMMENTS" name="plans_comments" />  
    </entity> 

</document> 
</dataConfig> 

나는 ... 문제가 있습니다 이처럼 내의 schema.xml ...

<schema> 
<fields> 

     <field name="projects_id" type="long" indexed="true" stored="true" required="true"/> 
     <field name="projects_batch_id" type="long" indexed="true" stored="true" required="true"/> 
     <field name="projects_operation" type="string" indexed="true" stored="true" required="true"/> 
     <field name="projects_name" type="string" indexed="true" stored="true" required="true"/> 
     <field name="projects_description" type="string" indexed="true" stored="true" required="true"/> 
     <field name="projects_estimated_cost" type="long" indexed="true" stored="true" required="true"/> 
     <field name="projects_grantor_agency_id" type="long" indexed="true" stored="true" required="true"/> 
     <field name="projects_grantee_agency_id" type="long" indexed="true" stored="true" required="true"/> 
     <field name="projects_project_status_id" type="long" indexed="true" stored="true" required="true"/> 
     <field name="projects_project_type_id" type="long" indexed="true" stored="true" required="true"/> 
     <field name="projects_start_date" type="date" indexed="true" stored="true" required="true"/> 
     <field name="projects_end_date" type="date" indexed="true" stored="true" required="true"/>  
     <field name="projects_tracs_parent_project_id" type="long" indexed="true" stored="true" required="true"/>  
     <field name="projects_state_parent_project_id" type="long" indexed="true" stored="true" required="true"/> 
     <field name="projects_plan_id" type="long" indexed="true" stored="true" required="true"/> 
     <field name="projects_plan_id_type" type="long" indexed="true" stored="true" required="true"/> 
     <field name="projects_tracs_id" type="long" indexed="true" stored="true" required="true"/> 
     <field name="projects_state_id" type="long" indexed="true" stored="true" required="true"/>  
     <field name="projects_valid" type="string" indexed="true" stored="true" required="true"/> 
     <field name="projects_applied" type="string" indexed="true" stored="true" required="true"/> 
     <field name="projects_comments" type="string" indexed="true" stored="true" required="true"/> 
     <field name="projects_generated_plan_id" type="long" indexed="true" stored="true" required="true"/> 
     <field name="projects_tracs_project_id" type="long" indexed="true" stored="true" required="true"/> 
     <field name="projects_state_plan_id" type="long" indexed="true" stored="true" required="true"/> 

       <!--   fields for plan enity --> 

     <field name="plans_id" type="long" indexed="true" stored="true" required="true"/> 
     <field name="plans_batch_id" type="long" indexed="true" stored="true" required="true"/> 
     <field name="plans_operation" type="string" indexed="true" stored="true" required="true"/> 
     <field name="plans_name" type="string" indexed="true" stored="true" required="true"/> 
     <field name="plans_description" type="string" indexed="true" stored="true" required="true"/> 
     <field name="plans_contact_id" type="long" indexed="true" stored="true" required="true"/> 
     <field name="plans_plan_type_id" type="long" indexed="true" stored="true" required="true"/> 
     <field name="plans_agency_id" type="long" indexed="true" stored="true" required="true"/> 
     <field name="plans_start_date" type="date" indexed="true" stored="true" required="true"/> 
     <field name="plans_end_date" type="date" indexed="true" stored="true" required="true"/> 
     <field name="plans_tracs_parent_plan_id" type="long" indexed="true" stored="true" required="true"/> 
     <field name="plans_state_parent_plan_id" type="string" indexed="true" stored="true" required="true"/>  
     <field name="plans_tracs_id" type="long" indexed="true" stored="true" required="true"/>  
     <field name="plans_state_id" type="long" indexed="true" stored="true" required="true"/> 
     <field name="plans_valid" type="string" indexed="true" stored="true" required="true"/> 
     <field name="plans_applied" type="string" indexed="true" stored="true" required="true"/> 
     <field name="plans_comments" type="string" indexed="true" stored="true" required="true"/> 

    </fields> 

    <uniqueKey>projects_id</uniqueKey> 
    <uniqueKey>plans_id</uniqueKey> 
    <defaultSearchField>projects_id</defaultSearchField> 
</schema> 

구성 및 내 solrconfig.xml는 ... 나는 다음과 같은 오류가 점점 오전 전체 가져 오기 명령을 실행하고 지금

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> 
     <lst name="defaults"> 
      <str name="config">/opt/solr/core0/conf/data-config.xml</str> 
     </lst> 
    </requestHandler> 

입니다. .

Apr 16, 2012 4:11:46 PM org.apache.solr.handler.dataimport.SolrWriter upload 
WARNING: Error creating document : SolrInputDocument[{projects_tracs_id=projects_tracs_id(1.0)={0}, projects_name=projects_name(1.0)={Minnesota Firearms Safety Training Program}, projects_description=projects_description(1.0)={To train 17,500 students and 425 new instructors at 45 recruiting workshops. Hold one statwide training academy. Award 2,650 recognition awards for length of service.}, projects_comments=projects_comments(1.0)={NULL}, projects_plan_id=projects_plan_id(1.0)={0}, projects_end_date=projects_end_date(1.0)={2002-12-31 00:00:00.0}, projects_tracs_parent_project_id=projects_tracs_parent_project_id(1.0)={0}, projects_plan_id_type=projects_plan_id_type(1.0)={0}, projects_project_status_id=projects_project_status_id(1.0)={4}, projects_state_plan_id=projects_state_plan_id(1.0)={1126}, projects_estimated_cost=projects_estimated_cost(1.0)={600000}, projects_valid=projects_valid(1.0)={N}, projects_grantor_agency_id=projects_grantor_agency_id(1.0)={1154}, projects_start_date=projects_start_date(1.0)={2001-12-31 00:00:00.0}, projects_applied=projects_applied(1.0)={N}, projects_state_id=projects_state_id(1.0)={0}, projects_batch_id=projects_batch_id(1.0)={1433468017}, projects_generated_plan_id=projects_generated_plan_id(1.0)={2050667163}, projects_id=projects_id(1.0)={2009553709}, projects_operation=projects_operation(1.0)={INSERT}, projects_state_parent_project_id=projects_state_parent_project_id(1.0)={0}, projects_grantee_agency_id=projects_grantee_agency_id(1.0)={1235}, projects_tracs_project_id=projects_tracs_project_id(1.0)={1123}, projects_project_type_id=projects_project_type_id(1.0)={3}}] 
org.apache.solr.common.SolrException: [doc=2009553709] missing required field: plans_applied 
    at org.apache.solr.update.DocumentBuilder.toDocument(DocumentBuilder.java:346) 
    at org.apache.solr.update.processor.RunUpdateProcessor.processAdd(RunUpdateProcessorFactory.java:60) 
    at org.apache.solr.update.processor.LogUpdateProcessor.processAdd(LogUpdateProcessorFactory.java:115) 
    at org.apache.solr.handler.dataimport.SolrWriter.upload(SolrWriter.java:73) 
    at org.apache.solr.handler.dataimport.DataImportHandler$1.upload(DataImportHandler.java:293) 
    at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:636) 
    at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:268) 
    at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:187) 
    at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:359) 
    at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:427) 
    at org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:408) 

solr은 두 번째 엔티티의 필드를 읽을 수 없습니다. 누구나이 문제에서 나를 도울 수 있습니까 ..? data-config.xml 또는 schema.xml 또는 두 파일을 구성하는 동안 실수를 저에게 말하십시오.

답변

0

스택 트레이스에서 Plan 문서 중 하나가 필수 plans_applied 필드의 값이 누락 된 것처럼 보입니다 , 당신이 알아야 할 첫 번째 사항은 데이터가 Solr에서 정규화되지 않아야한다는 것입니다. 그것은 인덱스에 들어가기 전에 평평 해지기로되어 있습니다.

따라서 두 테이블을 별도의 엔티티로 인덱싱하는 대신 이러한 두 테이블 간의 조인 (쿼리 대신 data-config.xml에서 직접)을 생성하여 각 결과 (조인) 테이블 행이 Solr 문서.

그런 식으로 단일 프로젝트에 대한 모든 데이터를 얻으려는 경우 모든 문서가 단일 문서에 저장되므로 이러한 유스 케이스의 조인이 필요하지 않습니다.

Solr에서 관계 및 제약 사항이 아닌 중복성을 포용해야합니다.

의미가 있습니까?

+0

자세한 내용을 더 자세히 설명하십시오 .... 미리 감사드립니다 –

+0

명확하지 않은 질문은 무엇입니까? –

+0

두 테이블을 결합하는 방법과 내 schema.xml을 어떻게 구성해야합니까? 위키를 읽었지만 이해할 수 없습니다. 작은 예제로 설명 할 수 있다면 도움이 될 것입니다. 감사합니다. –

관련 문제