2011-08-04 6 views
3

Solr을 사용하여 데이터베이스 검색을하고 있는데, mysql 데이터베이스에서 (datetime) 데이터 유형을 가진 필드를 가져와 datacfig.xml에서이 필드를 가져 오기 위해 select 쿼리를 설정해야합니다. , 나는 다음과의 schema.xml이 필드에 대한 필드 이름을 추가 :솔라 스키마의 datetime 필드

<field name="parsed_at" type="datetime" indexed="true" stored="true" />

하지만 SOLR는 이러한 수정 후 어떤 색인을하지 않았다. 은 내가

 
select date(parsed_at) as parsed_at ... 

와의 schema.xml 날짜와 같은 유형을 지정하는 것을 시도했다, 그러나 이것은 SOLR MySQL의에서 datatime 또는 타임 스탬프와 호환되는 모든 데이터 유형을 지원하지 않습니다 알 수없는 이유로
작동하지 않았다?

답변

6

Solr은 Ymd와 같이 MySQL 테이블의 일반적인 MySql 날짜 형식과 호환됩니다. MySQL의 parsed_at 열이 유형이 datetime 인 경우 선택 시간에 수정이 필요하지 않으므로 필드 이름 (solr) = cloumn 이름 (MySQL).

그래서 select parsed_at from ...을 시도해보십시오. SOLR는

<field name="parsed_at" type="datetime" indexed="true" stored="true" /> 

는 반드시 날짜를 처리 할 것이라는 fieldType (유형 =) SOLR의의 schema.xml 종료에 datetime. 그렇다면 여기에 구성을 게시하십시오. tdate이 날짜 형식을 처리 할 수 ​​

<fieldType name="tdate" class="solr.TrieDateField" omitNorms="true" precisionStep="6" positionIncrementGap="0"/> 

필드 유형 : 그렇지 않으면, 다음 줄은 schema.xml에 종료하는 경우, 기본값 인 확인합니다.

<field name="parsed_at" type="tdate" indexed="true" stored="true" /> 
+0

나는 그것이 작동하지 않았다 있는데, TDate을 사용했다 :( 17792은 0은 무엇인가 는 어떻게 확인할 수 있습니다 오류가 발생하면 오류 로그에서 오류를 표시하는 방법이 있습니까? – Ruba

+0

질문을 편집하여 추가하십시오. 데이터 가져 오기 처리기에 사용하는 SQL 문자열과 schema.xml의 필드 정의 –

1

것은 당신이 DataImportHandler를 사용하고 있습니까 : 당신이 당신의 schema.xml이 필드 정의가있는 경우 , 당신의 parsed_at 필드 유형을 사용할 수 있을까? 이 경우 SOLR에 날짜 저장 방법을 알려 주어야합니다. 당신이이 DateFormatTransformer 변압기를 사용하여이 작업을 수행 : 나는 URL 뒤에 ?zeroDateTimeBehavior=convertToNull 붙어

<dataConfig> 
    <dataSource 
     type='JdbcDataSource' 
     driver='com.mysql.jdbc.Driver' 
     url='jdbc:mysql://localhost/DATABASE?zeroDateTimeBehavior=convertToNull' 
     batchSize='-1' 
     user='USER' 
     password='PASS'/> 
    <document name='objects'> 
     <entity name='object' pk='id' transformer='DateFormatTransformer' query='BLA' > 
    <field column='id' /> 
      <field column='created' dateTimeFormat='yyyy-MM-dd HH:mm:ss' /> 
     </entity> 
    </document> 
</dataConfig> 

참고. 이렇게하면 빈 날짜가있는 오류를 방지 할 수 있습니다. 당신이 말한대로