Java源码示例:org.elasticsearch.action.admin.indices.template.put.PutIndexTemplateRequest
示例1
private boolean createTemplate(CollectionMetadata collection) throws Exception {
String searchAlias = collection.getId() + "-search";
String indexTemplateName = collection.getId() + "-template";
String indexTemplatePattern = collection.getId() + "-*";
log.debug("Attempting to initialize template for collection '" + collection.getId() + "'");
PutIndexTemplateRequest request = new PutIndexTemplateRequest(indexTemplateName)
.patterns(Arrays.asList(indexTemplatePattern))
.alias(new Alias(searchAlias))
.mapping("_doc", buildMappings(collection));
client.indices().putTemplate(request, RequestOptions.DEFAULT);
log.info("Template '" + indexTemplateName + "' for collection '" + collection.getId() + "' initialized");
return true;
}
示例2
private static void putGarmadonTemplate(RestHighLevelClient esClient, ElasticsearchConfiguration elasticsearch)
throws IOException, GarmadonEsException {
PutIndexTemplateRequest indexRequest = new PutIndexTemplateRequest("garmadon");
indexRequest.patterns(Collections.singletonList(elasticsearch.getIndexPrefix() + "*"));
// Create template settings with mandatory one
Settings.Builder templateSettings = Settings.builder()
.put("sort.field", "timestamp")
.put("sort.order", "desc")
.put("analysis.analyzer.path_analyzer.tokenizer", "path_tokenizer")
.put("analysis.tokenizer.path_tokenizer.type", "path_hierarchy")
.put("analysis.tokenizer.path_tokenizer.delimiter", "/")
.put("index.lifecycle.name", "garmadon")
.put("index.lifecycle.rollover_alias", "garmadon");
// Add settings from config
elasticsearch.getSettings().forEach(templateSettings::put);
indexRequest.settings(templateSettings);
// Add garmadon alias
Alias alias = new Alias("garmadon");
indexRequest.alias(alias);
String template = IOUtils.toString(Objects.requireNonNull(ElasticSearchReader.class.getClassLoader()
.getResourceAsStream("template.json")), "UTF-8");
indexRequest.mapping(ES_TYPE, template, XContentType.JSON);
if (!esClient.indices().putTemplate(indexRequest, RequestOptions.DEFAULT).isAcknowledged()) {
throw new GarmadonEsException("Failed to insert garmadon template");
}
}
示例3
private void updateTemplate(DocIndexMetaData md,
TransportPutIndexTemplateAction transportPutIndexTemplateAction,
Settings updateSettings) {
String templateName = PartitionName.templateName(ident.schema(), ident.name());
PutIndexTemplateRequest request = new PutIndexTemplateRequest(templateName)
.mapping(Constants.DEFAULT_MAPPING_TYPE, md.defaultMappingMap)
.create(false)
.settings(updateSettings)
.template(templateName + "*");
for (String alias : md.aliases()) {
request = request.alias(new Alias(alias));
}
transportPutIndexTemplateAction.execute(request);
}
示例4
private ListenableFuture<Long> updateTemplate(Map<String, Object> newMappings,
Settings newSettings,
TableIdent tableIdent,
AbstractDDLAnalyzedStatement statement) {
String templateName = PartitionName.templateName(tableIdent.schema(), tableIdent.name());
IndexTemplateMetaData indexTemplateMetaData =
clusterService.state().metaData().templates().get(templateName);
if (indexTemplateMetaData == null) {
return Futures.immediateFailedFuture(new RuntimeException("Template for partitioned table is missing"));
}
// merge mappings
Map<String, Object> mapping = mergeTemplateMapping(indexTemplateMetaData, newMappings);
// merge settings
Settings.Builder settingsBuilder = Settings.builder();
settingsBuilder.put(indexTemplateMetaData.settings());
settingsBuilder.put(newSettings);
PutIndexTemplateRequest request = new PutIndexTemplateRequest(templateName)
.create(false)
.mapping(Constants.DEFAULT_MAPPING_TYPE, mapping)
.order(indexTemplateMetaData.order())
.settings(settingsBuilder.build())
.template(indexTemplateMetaData.template());
request.putHeader(LoginUserContext.USER_INFO_KEY, statement.getParameterContext().getLoginUserContext());
for (ObjectObjectCursor<String, AliasMetaData> container : indexTemplateMetaData.aliases()) {
Alias alias = new Alias(container.key);
request.alias(alias);
}
SettableFuture<Long> result = SettableFuture.create();
transportActionProvider.transportPutIndexTemplateAction().execute(request,
new SettableFutureToNullActionListener<PutIndexTemplateResponse>(result));
return result;
}
示例5
private PutIndexTemplateRequest createTemplateRequest(CreateTableAnalyzedStatement statement) {
PutIndexTemplateRequest putIndexTemplateRequest = new PutIndexTemplateRequest(statement.templateName())
.mapping(Constants.DEFAULT_MAPPING_TYPE, statement.mapping())
.create(true)
.settings(settings(statement))
.template(statement.templatePrefix())
.order(100)
.alias(new Alias(statement.tableIdent().indexName()));
putIndexTemplateRequest.putHeader(LoginUserContext.USER_INFO_KEY, statement.getParameterContext().getLoginUserContext());
return putIndexTemplateRequest;
}
示例6
private PutIndexTemplateRequest buildRequest(ESCreateTemplateNode node) {
PutIndexTemplateRequest templateRequest = new PutIndexTemplateRequest(node.templateName())
.mapping(Constants.DEFAULT_MAPPING_TYPE, node.mapping())
.create(true)
.settings(node.indexSettings())
.template(node.indexMatch());
if (node.alias() != null) {
templateRequest.alias(new Alias(node.alias()));
}
templateRequest.putHeader(LoginUserContext.USER_INFO_KEY, getParamContext().getLoginUserContext());
return templateRequest;
}
示例7
@SuppressWarnings({"unchecked"})
@Override
public void handleRequest(final RestRequest request, final RestChannel channel, final Client client) {
PutIndexTemplateRequest putRequest = new PutIndexTemplateRequest(request.param("name"));
putRequest.template(request.param("template", putRequest.template()));
putRequest.order(request.paramAsInt("order", putRequest.order()));
putRequest.masterNodeTimeout(request.paramAsTime("master_timeout", putRequest.masterNodeTimeout()));
putRequest.create(request.paramAsBoolean("create", false));
putRequest.cause(request.param("cause", ""));
putRequest.source(request.content());
client.admin().indices().putTemplate(putRequest, new AcknowledgedRestListener<PutIndexTemplateResponse>(channel));
}
示例8
@Override
public void execute(IndexTemplate indexTemplate) {
try {
createClient().admin().indices().putTemplate(
new PutIndexTemplateRequest()
.name(indexTemplate.getName())
.source(indexTemplate.getSource(), XContentType.JSON)
);
} catch (Exception e) {
throw new ConfigurationException(e.getMessage(), e);
}
}
示例9
@Override
public void execute(IndexTemplate indexTemplate) {
try {
createClient().admin().indices().putTemplate(
new PutIndexTemplateRequest()
.name(indexTemplate.getName())
.source(indexTemplate.getSource())
);
} catch (Exception e) {
throw new ConfigurationException(e);
}
}
示例10
@Override
public void execute(IndexTemplate indexTemplate) {
try {
createClient().admin().indices().putTemplate(
new PutIndexTemplateRequest()
.name(indexTemplate.getName())
.source(indexTemplate.getSource(), XContentType.JSON)
);
} catch (Exception e) {
throw new ConfigurationException(e.getMessage(), e);
}
}
示例11
@Before
public void before() throws IOException {
repository = factory.create(Person.class);
repository.refreshPolicy(IMMEDIATE);
final IndicesAdminClient indices = client.admin().indices();
final PutIndexTemplateRequest datas = indices.preparePutTemplate("datas")
.setSource(toByteArray(getClass().getResourceAsStream("/datas.json")), JSON)
.request();
checkState(indices.putTemplate(datas).actionGet().isAcknowledged());
}
示例12
public static PutIndexTemplateRequest getClusterTemplateMapping() {
try {
return new PutIndexTemplateRequest().name("template_foxtrot_mappings")
.patterns(Lists.newArrayList(String.format("%s-*", getTableNamePrefix())))
.mapping(DOCUMENT_TYPE_NAME, getDocumentMapping());
}
catch (IOException ex) {
logger.error("TEMPLATE_CREATION_FAILED", ex);
return null;
}
}
示例13
public static void initializeMappings(Client client) {
PutIndexTemplateRequest templateRequest = getClusterTemplateMapping();
client.admin()
.indices()
.putTemplate(templateRequest)
.actionGet();
}
示例14
@Override
protected void run(Bootstrap<FoxtrotServerConfiguration> bootstrap, Namespace namespace, FoxtrotServerConfiguration configuration)
throws Exception {
ElasticsearchConfig esConfig = configuration.getElasticsearch();
ElasticsearchConnection connection = new ElasticsearchConnection(esConfig);
connection.start();
ClusterHealthResponse clusterHealth = connection.getClient()
.admin()
.cluster()
.health(new ClusterHealthRequest())
.actionGet();
int numDataNodes = clusterHealth.getNumberOfDataNodes();
int numReplicas = (numDataNodes < 2) ? 0 : 1;
logger.info("# data nodes: {}, Setting replica count to: {}", numDataNodes, numReplicas);
createMetaIndex(connection, ElasticsearchConsolePersistence.INDEX, numReplicas);
createMetaIndex(connection, ElasticsearchConsolePersistence.INDEX_V2, numReplicas);
createMetaIndex(connection, TableMapStore.TABLE_META_INDEX, numReplicas);
createMetaIndex(connection, ElasticsearchConsolePersistence.INDEX_HISTORY, numReplicas);
createMetaIndex(connection, FqlStoreServiceImpl.FQL_STORE_INDEX, numReplicas);
logger.info("Creating mapping");
PutIndexTemplateRequest putIndexTemplateRequest = ElasticsearchUtils.getClusterTemplateMapping();
PutIndexTemplateResponse response = connection.getClient()
.admin()
.indices()
.putTemplate(putIndexTemplateRequest)
.actionGet();
logger.info("Created mapping: {}", response.isAcknowledged());
logger.info("Creating hbase table");
HBaseUtil.createTable(configuration.getHbase(), configuration.getHbase()
.getTableName());
}
示例15
@Override
protected XContentBuilder toXContent(PutIndexTemplateRequest request, PutIndexTemplateResponse response, XContentBuilder builder) throws IOException {
builder.startObject()
.field(Fields.OK, true)
.field(Fields.ACKNOWLEDGED, response.isAcknowledged())
.endObject();
return builder;
}
示例16
@Override
protected ClusterBlockException checkBlock(CreateTableRequest request, ClusterState state) {
if (request.getCreateIndexRequest() != null) {
CreateIndexRequest createIndexRequest = request.getCreateIndexRequest();
return transportCreateIndexAction.checkBlock(createIndexRequest, state);
} else if (request.getPutIndexTemplateRequest() != null) {
PutIndexTemplateRequest putIndexTemplateRequest = request.getPutIndexTemplateRequest();
return transportPutIndexTemplateAction.checkBlock(putIndexTemplateRequest, state);
} else {
throw new IllegalStateException("Unknown table request");
}
}
示例17
public CompletableFuture<Long> create(BoundCreateTable createTable) {
var templateName = createTable.templateName();
var relationName = createTable.tableIdent();
var createTableRequest = templateName == null
? new CreateTableRequest(
new CreateIndexRequest(
relationName.indexNameOrAlias(),
createTable.tableParameter().settings()
).mapping(Constants.DEFAULT_MAPPING_TYPE, createTable.mapping())
)
: new CreateTableRequest(
new PutIndexTemplateRequest(templateName)
.mapping(Constants.DEFAULT_MAPPING_TYPE, createTable.mapping())
.create(true)
.settings(createTable.tableParameter().settings())
.patterns(Collections.singletonList(createTable.templatePrefix()))
.order(100)
.alias(new Alias(relationName.indexNameOrAlias()))
);
return Transports.execute(transportCreateTableAction, createTableRequest, resp -> {
if (!resp.isAllShardsAcked() && LOGGER.isWarnEnabled()) {
LOGGER.warn("CREATE TABLE `{}` was not acknowledged. This could lead to inconsistent state.", relationName.fqn());
}
return 1L;
}).exceptionally(error -> {
Throwable t = SQLExceptions.unwrap(error);
String message = t.getMessage();
Throwable cause = t.getCause();
if ("mapping [default]".equals(message) && cause != null) {
// this is a generic mapping parse exception,
// the cause has usually a better more detailed error message
return Exceptions.rethrowRuntimeException(cause);
} else if (createTable.ifNotExists() && isTableExistsError(t, templateName)) {
return 0L;
} else {
return Exceptions.rethrowRuntimeException(t);
}
});
}
示例18
@Override
public ActionFuture<PutIndexTemplateResponse> putTemplate(final PutIndexTemplateRequest request) {
return execute(PutIndexTemplateAction.INSTANCE, request);
}
示例19
@Override
public void putTemplate(final PutIndexTemplateRequest request, final ActionListener<PutIndexTemplateResponse> listener) {
execute(PutIndexTemplateAction.INSTANCE, request, listener);
}
示例20
private String extractPayload(PutIndexTemplateRequest putIndexTemplateRequest) throws IOException {
BytesStreamOutput out = new BytesStreamOutput();
putIndexTemplateRequest.writeTo(out);
return new String(out.bytes().toBytesRef().bytes);
}
示例21
private String extractPayload(PutIndexTemplateRequest putIndexTemplateRequest) throws IOException {
BytesStreamOutput out = new BytesStreamOutput();
putIndexTemplateRequest.writeTo(out);
return new String(out.bytes().toBytesRef().bytes);
}
示例22
private String extractPayload(PutIndexTemplateRequest putIndexTemplateRequest) throws IOException {
BytesStreamOutput out = new BytesStreamOutput();
putIndexTemplateRequest.writeTo(out);
return new String(out.bytes().toBytesRef().bytes);
}
示例23
public PutIndexTemplateRequestBuilder(Client client, JsonToString<JsonInput> jsonToString, StringToJson<JsonOutput> stringToJson) {
super(client, new PutIndexTemplateRequest(null), jsonToString, stringToJson);
}
示例24
@Override
protected ActionFuture<PutIndexTemplateResponse> doExecute(PutIndexTemplateRequest request) {
return client.admin().indices().putTemplate(request);
}
示例25
@Override
public ActionFuture<AcknowledgedResponse> putTemplate(final PutIndexTemplateRequest request) {
return execute(PutIndexTemplateAction.INSTANCE, request);
}
示例26
@Override
public void putTemplate(final PutIndexTemplateRequest request, final ActionListener<AcknowledgedResponse> listener) {
execute(PutIndexTemplateAction.INSTANCE, request, listener);
}
示例27
public CreateTableRequest(PutIndexTemplateRequest putIndexTemplateRequest) {
this.createIndexRequest = null;
this.putIndexTemplateRequest = putIndexTemplateRequest;
}
示例28
@Nullable
public PutIndexTemplateRequest getPutIndexTemplateRequest() {
return putIndexTemplateRequest;
}
示例29
@Test
public void passesIndexTemplateToClient() throws IOException {
//given
BulkProcessorObjectFactory factory = spy(createTestObjectFactoryBuilder().build());
IndicesAdminClient indicesAdminClient = mockedIndicesAdminClient(factory);
IndexTemplate indexTemplate = spy(IndexTemplate.newBuilder()
.withPath("classpath:indexTemplate.json")
.withName("testName")
.build());
String expectedPayload = indexTemplate.getSource().replaceAll("\\s+","");
// when
factory.execute(indexTemplate);
// then
ArgumentCaptor<PutIndexTemplateRequest> requestArgumentCaptor = ArgumentCaptor.forClass(PutIndexTemplateRequest.class);
verify(indicesAdminClient).putTemplate(requestArgumentCaptor.capture());
String actualPayload = extractPayload(requestArgumentCaptor.getValue());
Assert.assertTrue(actualPayload.contains(new ObjectMapper().readTree(expectedPayload).get("mappings").toString()));
}
示例30
@Test
public void passesIndexTemplateToClient() throws IOException {
//given
BulkProcessorObjectFactory factory = spy(createTestObjectFactoryBuilder().build());
IndicesAdminClient indicesAdminClient = mockedIndicesAdminClient(factory);
IndexTemplate indexTemplate = spy(IndexTemplate.newBuilder()
.withPath("classpath:indexTemplate.json")
.withName("testName")
.build());
String expectedPayload = indexTemplate.getSource().replaceAll("\\s+","");
// when
factory.execute(indexTemplate);
// then
ArgumentCaptor<PutIndexTemplateRequest> requestArgumentCaptor = ArgumentCaptor.forClass(PutIndexTemplateRequest.class);
verify(indicesAdminClient).putTemplate(requestArgumentCaptor.capture());
String actualPayload = extractPayload(requestArgumentCaptor.getValue());
Assert.assertTrue(actualPayload.contains(new ObjectMapper().readTree(expectedPayload).get("mappings").toString()));
}