package io.searchbox.indices;
import io.searchbox.client.JestResult;
import io.searchbox.common.AbstractIntegrationTest;
import io.searchbox.indices.mapping.PutMapping;
import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.routing.ShardRouting;
import org.elasticsearch.cluster.service.ClusterService;
import org.elasticsearch.index.mapper.DocumentMapper;
import org.elasticsearch.index.mapper.KeywordFieldMapper;
import org.elasticsearch.index.mapper.MapperService;
import org.elasticsearch.index.mapper.RootObjectMapper;
import org.elasticsearch.index.mapper.StringFieldMapper;
import org.elasticsearch.indices.IndicesService;
import org.elasticsearch.test.ESIntegTestCase;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
/**
* @author ferhat
* @author cihat keser
*/
@ESIntegTestCase.ClusterScope(scope = ESIntegTestCase.Scope.TEST, numDataNodes = 1)
public class PutMappingIntegrationTest extends AbstractIntegrationTest {
private static final String INDEX_NAME = "mapping_index";
private static final String INDEX_TYPE = "document";
@Before
public void setup() {
createIndex(INDEX_NAME);
ensureSearchable(INDEX_NAME);
}
@Test
public void testPutMapping() throws IOException {
PutMapping putMapping = new PutMapping.Builder(
INDEX_NAME,
INDEX_TYPE,
"{ \"document\" : { \"properties\" : { \"message_1\" : {\"type\" : \"string\", \"store\" : \"yes\"} } } }"
).build();
JestResult result = client.execute(putMapping);
assertTrue(result.getErrorMessage(), result.isSucceeded());
}
@Test
public void testPutMappingWithDocumentMapperBuilder() throws Exception {
RootObjectMapper.Builder rootObjectMapperBuilder = new RootObjectMapper.Builder(INDEX_TYPE)
.add(new KeywordFieldMapper.Builder("message_2").store(true));
MapperService mapperService = getMapperService();
DocumentMapper documentMapper = new DocumentMapper.Builder(rootObjectMapperBuilder, mapperService)
.build(mapperService);
String expectedMappingSource = documentMapper.mappingSource().toString();
PutMapping putMapping = new PutMapping.Builder(
INDEX_NAME,
INDEX_TYPE,
expectedMappingSource
).build();
JestResult result = client.execute(putMapping);
assertTrue(result.getErrorMessage(), result.isSucceeded());
}
private MapperService getMapperService() throws Exception {
ClusterState clusterState = internalCluster().clusterService().state();
ShardRouting shardRouting = clusterState.routingTable().index(INDEX_NAME).shard(0).getShards().get(0);
String nodeName = clusterState.getNodes().get(shardRouting.currentNodeId()).getName();
ClusterService clusterService = internalCluster().getInstance(ClusterService.class, nodeName);
IndicesService indexServices = internalCluster().getInstance(IndicesService.class, nodeName);
return indexServices.createIndexMapperService(clusterService.state().metaData().getIndices().get(INDEX_NAME));
}
}