2012-03-06 10 views
0

私は、エンコードされた文字列をSolrに送信し、取得時にそれをデコードしようとしています。私のエンコードのようになります。Solrデータのエンコード/デコード

public static String compress(String inputString) { 
    try { 
     if (inputString == null || inputString.length() == 0) { 
      return null; 
     } 
     return new String(compress(inputString.getBytes("UTF-8"))); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 


private static byte[] compress(byte[] input) { 
    try { 
     ByteArrayOutputStream out = new ByteArrayOutputStream(); 
     GZIPOutputStream gzip = new GZIPOutputStream(out); 
     gzip.write(input); 
     gzip.close(); 
     return out.toByteArray(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return null; 
} 

その後、私はSOLRに送る、と私は(それがここで失敗したので、今の復号を無視して)、それを取り戻すためにしようとすると

SolrDocument resultDoc = iter.next(); 
String content = (String) resultDoc.getFieldValue("source"); 
System.out.println(content); 

私は、このような文字列を送信した場合"こんにちは私の名前はクリス"のようにエンコードされます(どのようなスタックのオーバーフローが変更されて無視)のようになります。しかし

ã�������ÛHÕ……W»≠T»KÃMU»,VpŒ( ,�ìùùG��� 

私は戻ってSOLRから取得することは、明らかに復号化が失敗になります

#31;ã#8;#0;#0;#0;#0;#0;#0;#0;ÛHÕ……W»≠T»KÃMU»,VpŒ( ,#6;#0;ìùùG#22;#0;#0;#0; 

です。 JettyのインストールとTomcatの両方を同じ問題で使ってみました。

答えて

1

このエントリは、Solrディストリビューションに付属のschema.xmlファイルの例を参照してください。

<!--Binary data type. The data should be sent/retrieved in as Base64 encoded Strings --> 
<fieldtype name="binary" class="solr.BinaryField"/> 

はあなたがインデックスにあなたのエンコードされた値を格納するために使用しているフィールドが binary FIELDTYPEを使用していることを、あなたは文字列base64エンコードを使用していることを確認してください。