我从Cloudera Search发现了一个名为Map的惊人小部件。我想用它来显示按国家/地区划分的记录数,但它只适用于iso alpha-3国家/地区代码。我的记录中只有iso alpha-2国家/地区代码值(请参阅此处的差异http://www.nationsonline.org/oneworld/country_code_list.htm)。
我想知道如何获得iso alpha-3国家/地区代码?我想提一下,我的原始数据是csv格式,我有一个名为Country的字段,其中包含完整的国家名称,另一个名为Country_Code,用于存储iso apha-2国家/地区代码。
我尝试修改SOLR schema.xml和Morphlines文件但没有正面结果。任何想法都受到高度赞赏。
谢谢!
答案 0 :(得分:0)
实际上我遇到了同样的问题。我设法通过创建自定义Morphlines命令来解决它,如下所述。
构建自定义Morphlines命令。
在Morphlines中,您可以轻松地构建自己的命令。 (见Implementing your own Custom Command)。以下是您可以在命令构建器中使用的代码示例:
// Nested class:
private static final class ConvertCountryCode extends AbstractCommand {
private final String fieldName;
public ConvertCountryCode(Command Builder builder, Config config, Command parent, Command child, MorphlineContext context) {
super(builder, config, parent, child, context);
this.fileName = getConfigs().getString(config, "field");
}
@Override
@SuppressWarning("unchecked")
protected boolean doProcess(Record record) {
ListIterator iter = record.get(fieldName).listIterator();
while(iter.hasNext()) {
Locale locale = new Locale ("", iter.next().toString());
String result = locale.getISO3Country();
iter.set(result);
}
return super.doProcess(record);
}
}
拥有命令构建器后,您可以编辑Morphlines conf文件以添加命令,如下所示:
commands: [{
convertCountryCode {
field: Country_Code
}
}
使用时,当您将其添加到索引时,此命令将用ISO Alpha-3替换所有ISO Alpha-2代码。我已经测试了这个解决方案,它的确有效!确保将包添加到Morphline的命令导入列表中。
使用Java命令
或者,如果您不想构建自定义命令,则可以使用Java command。