Cloudera使用iso alpha-2国家/地区代码搜索地图小部件

时间:2014-10-14 14:59:59

标签: search solr schema bigdata cloudera

我从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文件但没有正面结果。任何想法都受到高度赞赏。

谢谢!

1 个答案:

答案 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