首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

Solr配置数据列时大小写有关问题

2012-06-29 
Solr配置数据列时大小写问题在solr里配置entity时,没有把field里column的大小写配成和数据库的schema一致,

Solr配置数据列时大小写问题
在solr里配置entity时,没有把field里column的大小写配成和数据库的schema一致,导致有些列的数据一直取不出来,检查好多遍才发现,多花了两个小时。 主要是习惯了hibernate里配置列名时的大小写不敏感。
看了下源码,数据库里复杂类型如datetime,clob列的转换是继承了Transformer类,实现transformRow方法完成的,如Clob字段的转换如下:

public Object transformRow(Map<String, Object> aRow, Context context) {    for (Map<String, String> map : context.getAllEntityFields()) {      if (!TRUE.equals(map.get(CLOB))) continue;      String column = map.get(DataImporter.COLUMN);      String srcCol = map.get(RegexTransformer.SRC_COL_NAME);      if (srcCol == null)        srcCol = column;      [b]Object o = aRow.get(srcCol);[/b]      if (o instanceof List) {        List<Clob> inputs = (List<Clob>) o;        List<String> results = new ArrayList<String>();        for (Object input : inputs) {          if (input instanceof Clob) {            Clob clob = (Clob) input;            results.add(readFromClob(clob));          }        }        aRow.put(column, results);      } else {        if (o instanceof Clob) {          Clob clob = (Clob) o;          aRow.put(column, readFromClob(clob));        }      }    }    return aRow;  }

datetime的转换如下:
public Object transformRow(Map<String, Object> aRow, Context context) {    for (Map<String, String> map : context.getAllEntityFields()) {      Locale locale = Locale.getDefault();      String customLocale = map.get("locale");      if(customLocale != null){        locale = new Locale(customLocale);      }      String fmt = map.get(DATE_TIME_FMT);      if (fmt == null)        continue;      String column = map.get(DataImporter.COLUMN);      String srcCol = map.get(RegexTransformer.SRC_COL_NAME);      if (srcCol == null)        srcCol = column;      try {        [b]Object o = aRow.get(srcCol);[/b]        if (o instanceof List) {          List inputs = (List) o;          List<Date> results = new ArrayList<Date>();          for (Object input : inputs) {            results.add(process(input, fmt, locale));          }          aRow.put(column, results);        } else {          if (o != null) {            aRow.put(column, process(o, fmt, locale));          }        }      } catch (ParseException e) {        LOG.warn("Could not parse a Date field ", e);      }    }    return aRow;  }


从Object o = aRow.get(srcCol);可以看出,这些字段都是大小写敏感的了。

热点排行