2012-01-19 4 views
3

Lucene APIを使用してSolrインデックスを照会するコードを継承しました。例えば、Lucene APIを使用してSolrインデックスからfloatフィールドを表示

// doc:Document 

val sdoc = new SolrDocument 

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

これは、フィールドの値が文字列でない場合を除いて、正常に動作します:

コードは、検索の多くを行い、最後に文書をSolrのために見つかったすべてのLucene文書を変換し、浮動小数点数またはブール値。浮動小数点数のフィールドでは、stringValue()は、おそらく浮動小数点数の文字列表現である奇妙な文字(例:¿£൱)を返します。

Luceneドキュメントからfloat値を正しく取得するにはどうすればよいですか?バイナリ値として格納された数値については

+0

どのように浮遊物を保管していますか?どのバージョンのluceneを使用していますか? Lukeを使用して検査したときに正しい値が表示されますか? – naresh

答えて

3

は、あなたはあなたがあなたの適切な数値に変換する必要があります戻り値としてバイト[]を取得しますdoc.getBinaryValue(フィールド名)によって取得する必要があります。これは、あなたが何ができるかです:

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

関連する問題