2

我正在学习 Elasticsearch,并开始了一个新项目。现在我想知道我应该在哪里添加用于创建映射等的初始代码。您是否会创建一个包含不同 cURL 命令的外部脚本然后运行它,或者在您拥有配置代码的 Java 项目中拥有一个自己的包然后在需要时运行它?哪种方法最合适,为什么?

我想用 XContentBuilder 尝试的映射

{
    "tweet" : {
        "properties" : {
            "message" : {
                "type" : "string",
                "store" : "yes",
                "index" : "analyzed",
                "null_value" : "na"
            }
        }
    }
}
4

1 回答 1

1

我喜欢在java中使用它:

public void putMappingFromString(String index, String type, String mapping) {

    IndicesAdminClient iac = getClient().admin().indices();
    PutMappingRequestBuilder pmrb = new PutMappingRequestBuilder(iac);
    pmrb.setIndices(index);
    pmrb.setType(type);
    pmrb.setSource(mapping);
    ListenableActionFuture<PutMappingResponse> laf = pmrb.execute();
    PutMappingResponse pmr = laf.actionGet();
    pmr.getAcknowledged();

}

您还可以从集群状态(间接)获取索引的映射:

public String getMapping(String index, String type) throws EsuException {
    ClusterState cs = getClient().admin().cluster().prepareState().setFilterIndices(index).execute().actionGet().getState();
    IndexMetaData imd = cs.getMetaData().index(index);

    if (imd == null) {
        throw new EsuIndexDoesNotExistException(index);
    }

    MappingMetaData mmd = imd.mapping(type);

    if (mmd == null) {
        throw new EsuTypeDoesNotExistException(index, type);
    }

    String mapping = "";
    try {
        mapping = mmd.source().string();
    } catch (IOException e) {
        mapping = "{ \"" + e.toString() + "\"}";
    }
    return mapping;
}

如果您将映射作为资源存储在类路径上,这允许对映射和源代码进行版本控制

于 2013-03-26T23:54:21.807 回答