说实话, java的方式太繁琐, 不如直接使用DSL进行创建
1, create
package com.wenbronk.elasticsearch.usage.index; import com.wenbronk.elasticsearch.usage.highLevel.RestHighLevelClientParent;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.ActionListener;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
import org.elasticsearch.action.support.ActiveShardCount;
import org.elasticsearch.action.support.IndicesOptions;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.rest.RestStatus;
import org.junit.jupiter.api.Test; import java.io.IOException; public class Index_1_Create extends RestHighLevelClientParent { /**
* index 使用java客户端不好创建, 可以在kibana中进行创建
* 注意mapping一旦创建, 不可更改
*/
@Test
public void createIndices() throws IOException { CreateIndexRequest request = new CreateIndexRequest("twitter"); // add partition
request.source("{\n" +
" \"settings\" : {\n" +
" \"number_of_shards\" : 3,\n" +
" \"number_of_replicas\" : 2\n" +
" },\n" +
" \"mappings\" : {\n" +
" \"tweet\" : {\n" +
" \"properties\" : {\n" +
" \"message\" : { \"type\" : \"text\" }\n" +
" }\n" +
" }\n" +
" },\n" +
" \"aliases\" : {\n" +
" \"twitter_alias\" : {}\n" +
" }\n" +
"}", XContentType.JSON); // 配置可选参数
request.timeout(TimeValue.timeValueMinutes());
// request.timeout("2m");
request.masterNodeTimeout(TimeValue.timeValueMinutes());
// request.masterNodeTimeout("1m");
// request.waitForActiveShards(2);
request.waitForActiveShards(ActiveShardCount.DEFAULT); // 使用异步的方式创建
client.indices().createAsync(request, new ActionListener<CreateIndexResponse>() {
@Override
public void onResponse(CreateIndexResponse createIndexResponse) {
boolean acknowledged = createIndexResponse.isAcknowledged();
boolean shardsAcknowledged = createIndexResponse.isShardsAcknowledged();
} @Override
public void onFailure(Exception e) {
System.out.println(e.getCause());
}
});
} }
2, delete
package com.wenbronk.elasticsearch.usage.index; import com.wenbronk.elasticsearch.usage.highLevel.RestHighLevelClientParent;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.ActionListener;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
import org.elasticsearch.action.support.IndicesOptions;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.rest.RestStatus;
import org.junit.jupiter.api.Test; public class Index_2_Delete extends RestHighLevelClientParent { @Test
public void deleteIndices() {
DeleteIndexRequest request = new DeleteIndexRequest("twitter"); request.timeout(TimeValue.timeValueMinutes());
// request.timeout("2m");
// request.masterNodeTimeout("1m");
request.masterNodeTimeout(TimeValue.timeValueMinutes());
request.indicesOptions(IndicesOptions.lenientExpandOpen()); client.indices().deleteAsync(request, new ActionListener<DeleteIndexResponse>() {
@Override
public void onResponse(DeleteIndexResponse deleteIndexResponse) {
boolean acknowledged = deleteIndexResponse.isAcknowledged();
} @Override
public void onFailure(Exception e) {
ElasticsearchException ee = (ElasticsearchException) e;
if (ee.status() == RestStatus.NOT_FOUND) {
System.out.println("indices not found");
}
}
}); } }
3, exists
package com.wenbronk.elasticsearch.usage.index; import com.wenbronk.elasticsearch.usage.highLevel.RestHighLevelClientParent;
import org.elasticsearch.action.ActionListener;
import org.elasticsearch.action.admin.indices.get.GetIndexRequest; public class Index_3_exists extends RestHighLevelClientParent { public void testExists() {
GetIndexRequest request = new GetIndexRequest();
request.indices("twitter"); // 可选参数:
request.local(false);
request.humanReadable(true);
request.includeDefaults(false);
// request.indicesOptions(indicesOptions); client.indices().existsAsync(request, new ActionListener<Boolean>() {
@Override
public void onResponse(Boolean aBoolean) {
System.out.println(aBoolean);
} @Override
public void onFailure(Exception e) { }
});
}
}
4, mapping
package com.wenbronk.elasticsearch.usage.index; import com.wenbronk.elasticsearch.usage.highLevel.RestHighLevelClientParent;
import org.elasticsearch.action.ActionListener;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.action.admin.indices.mapping.put.PutMappingResponse;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType; public class Index_4_mapping extends RestHighLevelClientParent { public void testPutMapping() { PutMappingRequest request = new PutMappingRequest("twitter");
request.type("tweet"); request.source(
"{\n" +
" \"properties\": {\n" +
" \"message\": {\n" +
" \"type\": \"text\"\n" +
" }\n" +
" }\n" +
"}",
XContentType.JSON); // 可选参数
request.timeout(TimeValue.timeValueMinutes());
// request.timeout("2m");
request.masterNodeTimeout(TimeValue.timeValueMinutes());
// request.masterNodeTimeout("1m"); client.indices().putMappingAsync(request, new ActionListener<PutMappingResponse>() {
@Override
public void onResponse(PutMappingResponse putMappingResponse) {
boolean acknowledged = putMappingResponse.isAcknowledged();
System.out.println(acknowledged);
} @Override
public void onFailure(Exception e) { }
});
} }
还是原DSL好用