2012-01-19 3 views
3

저는 Lucene API를 사용하여 Solr 색인을 쿼리하는 일부 코드를 상속 받았습니다.Lucene API를 사용하여 Solr 색인에서 float 필드 표시

코드는 검색을 많이 수행하고, 마지막에 문서 SOLR 모든 발견 루씬 문서를 변환 : 필드 값이 문자열, 예를 들어,없는 경우

// doc:Document 

val sdoc = new SolrDocument 

for (f:Fieldable <- doc.getFields if f.isStored) { 
    sdoc.addField(f.name(),f.stringValue()) 
} 

이를 제외하고 잘 작동을 수레 또는 부엉이. float 필드에서 stringValue()은 아마도 이상한 문자 (예 : £ £ ൱)를 반환합니다. 아마도 플로트의 문자열 표현입니다.

Lucene 문서에서 float 값을 올바르게 얻으려면 어떻게해야합니까? 바이너리 값으로 저장 숫자를 들어

+0

어떻게 부유물을 저장 하시겠습니까? lucene의 어떤 버전을 사용하고 있습니까? Luke를 사용하여 검사 할 때 정확한 값을 보시겠습니까? – naresh

답변

3

, 당신은 바이트 [] 당신이해야합니다 등의 반환 값이 적절한 숫자 값으로 변환 얻을 것이다 doc.getBinaryValue (fieldName에)에 의해 얻을 필요가있다. 이것은 당신이 할 수있는 것입니다 :

if(!field.isBinary()){ 
    sdoc.addField(fieldName, doc.get(fieldName)); 
} else{ 
    ByteBuffer buff = ByteBuffer.wrap(doc.getBinaryValue(fieldName)); 
    sdoc.addField(fieldName, buff.getFloat()); 
} 

여기 전환에 도움이 제공하는 SO Quetion입니다.

+0

필드가 sdouble (SortableDouble)이면 무엇입니까? 코드는 sdouble의 바이너리 필드 블록이 아니기 때문에 결과적으로 "@ # sV7"과 같은 이상한 문자열이 있습니다. 도움을 청합니다! – trillions