2015-01-23 1 views
0

Zookeeper가 관리하는 3 개의 Solr 인스턴스로 구성된 Solr (버전 4.10.3) 클라우드가 있습니다. 각 코어는 현재 리더에서 다른 노드로 복제되어 재 생성됩니다.Solr은 복제 중 필드를 다시 해석합니다.

문제가 생겼습니다. 와일드 카드 쿼리를 위해 SQL에서 datetime 필드를 TextField로 인덱싱해야합니다 (최상의 솔루션은 아니지만 요구 사항은 적지 만). 가져 오기를 수행하는 코어에서 모든 것이 올바르게 나타나야하고 필드에 다음과 같은 값이 포함되어 있습니다 : 2008.10.18 17:16:31.0하지만 다른 코어의 해당 문서 (복제 핸들러로 동기화 됨)는 동일한 필드에 대해 Sat Oct 18 17:16:31 CEST 2008과 같은 값을가집니다. 나는이 성공의 밑바닥까지 성공하기 위해 잠시 동안 노력해 왔습니다. 코어와 클라우드 모두의 동작은 이와는 별도로 의도 된 것입니다.

누군가 무엇이 잘못하고 있는지 아이디어가 있습니까?

fieldType은 다음과 같습니다

여기
<fieldType name="stringD" class="solr.TextField" sortMissingLast="true" omitNorms="false"> 
    <analyzer> 
     <tokenizer class="solr.KeywordTokenizerFactory"/>   
     <filter class="solr.PatternReplaceFilterFactory" pattern="([-])" replacement="." replace="all" /> 
    </analyzer> 
</fieldType> 

이 모든 영광의 동작을 보여주는 link to a screenshot이며, 상단 부분은 전체 수입 한 핵심에서입니다. 이 사용하는 것처럼 초기에 가져 오기 쿼리를이 코어를 설정하는 경우

)

답변

0

그래서 내 첫 번째 대답은 여기 내 첫 번째 질문으로 이동합니다.

SELECT * FROM [TABLE] 

그런 다음 필드는 데이터 가져 오기 처리기에서 이와 같이 매핑되었습니다.

<field column="ENDTIME" name="ENDTIME" /> 

SOLR이 날짜로 SQL에서 [ENDTIME (DATETIME2) 컬럼의 내용을 변환하기 시작

이 가져 오기 쿼리에 추가되었습니다.

CAST(CAST(ENDTIME as datetime2(0)) as varchar(100)) as ENDTIMESTR 

SQL : 2008-10-18 17:16:31.0에서 올바른 형식을 사용해야합니다.

은 데이터 가져 오기 - 핸들러 맵핑은 또한 다음과 같이 변경되었습니다 :이 때문에 <field column="ENDTIMESTR" name="ENDTIME" />

, 모두 [ENDTIME] 및 [ENDTIMESTR] 데이터 가져 오기 핸들러에 SQL에서 와서 어떻게 든 SOLR 만했다 전체 가져 오기를 시작한 코어에서 올바른 필드/fieldType을 사용할 수 있습니다. 필드를 다른 코어 Solr에 복사 할 때 원본 [ENDTIME] 열 (전체/델타 가져 오기 중에 데이터 가져 오기 처리기에만 존재 함, SELECT * FROM [TABLE]을 기억하십시오)을 검토 한 것 같습니다. Solr 스키마의 ENDTIME은 모두 TextField였습니다.

해결 방법 : *을 제거하고 대신 CAST(CAST(ENDTIME as datetime2(0)) as varchar(100)) as ENDTIME과 같이 보이는 [ENDTIME]과 함께 전체/델타 쿼리의 모든 필드를 명시 적으로 정의하십시오.

모든 것이 이제 의도 한대로 작동합니다. 어딘가에 데이터 가져 오기 - 처리기 매핑 버그가있는 것 같아요하지만 내 구성 정말 최고 아니 었어.

희망 사항은 미끄러운 솔 - 슬로프에서 다른 사람을 도울 수 있기를 바랍니다.