SOLR에서 ClobTransformer를 1.4부터 지원해준다고 한다.
덕분에 오라클의 CLOB타입을 인덱싱하려면 커스텀으로 트랜스포머를 만들어야 한다.
그래서 만들었다.
허접하게 나마.
====================================================================================
import java.io.BufferedReader;
import java.util.List;
import java.util.Map;
import oracle.sql.CLOB;
import org.apache.solr.handler.dataimport.Context;
import org.apache.solr.handler.dataimport.Transformer;
/**
* CLOB to String 변환을 위한 커스텀 트랜스 포머
*
* @since 2009. 3. 12.
*/
public class CustomClobTransformer extends Transformer {
/* (non-Javadoc)
* @see org.apache.solr.handler.dataimport.Transformer#transformRow(java.util.Map, org.apache.solr.handler.dataimport.Context)
*/
public Map<String, Object> transformRow(Map<String, Object> row, Context context) {
List<Map<String, String>> fields = context.getAllEntityFields();
for (Map<String, String> field : fields) {
String clob = field.get("clob");
if ("true".equals(clob)) {
String columnName = field.get("column");
CLOB value = (CLOB)row.get(columnName);
StringBuffer strOut = new StringBuffer();
String str = "";
try {
BufferedReader br = new BufferedReader(value.getCharacterStream());
while ((str = br.readLine()) != null) {
strOut.append(str);
}
} catch (Exception e) {
e.printStackTrace();
}
String stringValue = strOut.toString();
row.put(columnName, stringValue);
}
}
return row;
}
}