/**
*
*/
package es;
import java.io.IOException;
import java.net.InetAddress;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse;
import org.elasticsearch.action.bulk.BackoffPolicy;
import org.elasticsearch.action.bulk.BulkProcessor;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.get.MultiGetItemResponse;
import org.elasticsearch.action.get.MultiGetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.MultiSearchResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.AdminClient;
import org.elasticsearch.client.ClusterAdminClient;
import org.elasticsearch.client.IndicesAdminClient;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.cluster.health.ClusterHealthStatus;
import org.elasticsearch.cluster.health.ClusterIndexHealth;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.unit.ByteSizeUnit;
import org.elasticsearch.common.unit.ByteSizeValue;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.script.Script;
import org.elasticsearch.script.ScriptService;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.metrics.MetricsAggregationBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.elasticsearch.search.sort.SortParseElement;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
/**
* @author dzh
* @date Sep 24, 2016 1:44:21 PM
* @since 1.0
*/
@Ignore
public class TestTransportClient {
TransportClient client;
@Before
public void init() throws Exception {
Settings settings = Settings.settingsBuilder().put("cluster.name", "elasticsearch").put("client.transport.sniff", true)
.put("client.transport.ignore_cluster_name", false).put("client.transport.ping_timeout", "5s")
.put("client.transport.nodes_sampler_interval", "5s").build();
TransportAddress addr = new InetSocketTransportAddress(InetAddress.getByName(null), 9300);
client = TransportClient.builder().settings(settings).build()
// .addTransportAddress(new
// InetSocketTransportAddress(InetAddress.getByName("host1"),
// 9300))
.addTransportAddress(addr);
// on shutdown
System.out.println(client.toString());
}
@After
public void stop() {
client.close();
}
@Test
public void testIndex() throws IOException {
IndexResponse response = client.prepareIndex("twitter", "tweet", "1").setSource(XContentFactory.jsonBuilder().startObject()
.field("user", "kimchy").field("postDate", new Date()).field("message", "trying out Elasticsearch").endObject()).get();
// Index name
String _index = response.getIndex();
// Type name
String _type = response.getType();
// Document ID (generated or not)
String _id = response.getId();
// Version (if it's the first time you index this document, you will
// get: 1)
long _version = response.getVersion();
// isCreated() is true if the document is a new one, false if it has
// been updated
boolean created = response.isCreated();
System.out.println(response.toString());
}
public void testIndexJsonString() {
String json = "{" + "\"user\":\"kimchy\"," + "\"postDate\":\"2013-01-30\"," + "\"message\":\"trying out Elasticsearch\"" + "}";
IndexResponse response = client.prepareIndex("twitter", "tweet").setSource(json).get();
}
@Test
public void testGet() {
GetResponse response = client.prepareGet("twitter", "tweet", "1").get();
System.out.println(response.toString());
}
public void testDel() {
DeleteResponse response = client.prepareDelete("twitter", "tweet", "1").get();
System.out.println(response.toString());
}
public void testUpdate() throws Exception {
UpdateRequest updateRequest = new UpdateRequest();
updateRequest.index("index");
updateRequest.type("type");
updateRequest.id("1");
updateRequest.doc(XContentFactory.jsonBuilder().startObject().field("gender", "male").endObject());
UpdateResponse response = client.update(updateRequest).get();
System.out.println(response.toString());
client.prepareUpdate("ttl", "doc", "1").setScript(new Script("ctx._source.gender = \"male\"", ScriptService.ScriptType.INLINE, null, null))
.get();
client.prepareUpdate("ttl", "doc", "1").setDoc(XContentFactory.jsonBuilder().startObject().field("gender", "male").endObject()).get();
}
@Test
public void testUpsert() throws Exception {
IndexRequest indexRequest = new IndexRequest("index", "type", "1")
.source(XContentFactory.jsonBuilder().startObject().field("name", "Joe Smith").field("gender", "male").endObject());
UpdateRequest updateRequest = new UpdateRequest("index", "type", "1")
.doc(XContentFactory.jsonBuilder().startObject().field("gender", "male").endObject()).upsert(indexRequest);
UpdateResponse response = client.update(updateRequest).get();
System.out.println(response.getGetResult().sourceAsString());
}
@Test
public void testMultiGet() {
MultiGetResponse multiGetItemResponses = client.prepareMultiGet().add("twitter", "tweet", "1").add("twitter", "tweet", "2", "3", "4")
.add("another", "type", "foo").get();
for (MultiGetItemResponse itemResponse : multiGetItemResponses) {
GetResponse response = itemResponse.getResponse();
if (response.isExists()) {
String json = response.getSourceAsString();
System.out.println(json);
}
}
}
@Test
public void testBulk() throws Exception {
BulkRequestBuilder bulkRequest = client.prepareBulk();
// either use client#prepare, or use Requests# to directly build
// index/delete requests
bulkRequest.add(client.prepareIndex("twitter", "tweet", "1").setSource(XContentFactory.jsonBuilder().startObject().field("user", "kimchy")
.field("postDate", new Date()).field("message", "trying out Elasticsearch").endObject()));
bulkRequest.add(client.prepareIndex("twitter", "tweet", "2").setSource(XContentFactory.jsonBuilder().startObject().field("user", "kimchy")
.field("postDate", new Date()).field("message", "another post").endObject()));
BulkResponse bulkResponse = bulkRequest.get();
if (bulkResponse.hasFailures()) {
// process failures by iterating through each bulk response item
}
}
@Test
public void testBulkProcessor() throws Exception {
BulkProcessor bulkProcessor = BulkProcessor.builder(client, new BulkProcessor.Listener() {
@Override
public void beforeBulk(long executionId, BulkRequest request) {
}
@Override
public void afterBulk(long executionId, BulkRequest request, BulkResponse response) {
}
@Override
public void afterBulk(long executionId, BulkRequest request, Throwable failure) {
}
}).setBulkActions(10000).setBulkSize(new ByteSizeValue(1, ByteSizeUnit.GB)).setFlushInterval(TimeValue.timeValueSeconds(5))
.setConcurrentRequests(1).setBackoffPolicy(BackoffPolicy.exponentialBackoff(TimeValue.timeValueMillis(100), 3)).build();
bulkProcessor.add(new IndexRequest("twitter", "tweet", "1").source(""));
bulkProcessor.add(new DeleteRequest("twitter", "tweet", "2"));
bulkProcessor.awaitClose(10, TimeUnit.MINUTES);
// bulkProcessor.close();
}
@Test
public void testSearch() {
SearchResponse response = client.prepareSearch("index1", "index2").setTypes("type1", "type2").setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(QueryBuilders.termQuery("multi", "test")) // Query
.setPostFilter(QueryBuilders.rangeQuery("age").from(12).to(18)) // Filter
.setFrom(0).setSize(60).setExplain(true).execute().actionGet();
}
@Test
public void testScrollSearch() {
QueryBuilder qb = QueryBuilders.termQuery("multi", "test");
// 100 hits per shard will be returned for each scroll
SearchResponse scrollResp = client.prepareSearch("index1").addSort(SortParseElement.DOC_FIELD_NAME, SortOrder.ASC)
.setScroll(new TimeValue(60000)).setQuery(qb).setSize(100).execute().actionGet();
// Scroll until no hits are returned
while (true) {
for (SearchHit hit : scrollResp.getHits().getHits()) {
// Handle the hit...
}
scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet();
// Break condition: No hits are returned
if (scrollResp.getHits().getHits().length == 0) {
break;
}
}
}
@Test
public void testMultiSearch() {
SearchRequestBuilder srb1 = client.prepareSearch().setQuery(QueryBuilders.queryStringQuery("elasticsearch")).setSize(1);
SearchRequestBuilder srb2 = client.prepareSearch().setQuery(QueryBuilders.matchQuery("name", "kimchy")).setSize(1);
MultiSearchResponse sr = client.prepareMultiSearch().add(srb1).add(srb2).execute().actionGet();
// You will get all individual responses from
// MultiSearchResponse#getResponses()
long nbHits = 0;
for (MultiSearchResponse.Item item : sr.getResponses()) {
SearchResponse response = item.getResponse();
nbHits += response.getHits().getTotalHits();
}
}
@Test
public void testAggregation() {
SearchResponse sr = client.prepareSearch().setQuery(QueryBuilders.matchAllQuery())
.addAggregation(AggregationBuilders.terms("agg1").field("field"))
.addAggregation(AggregationBuilders.dateHistogram("agg2").field("birth").interval(DateHistogramInterval.YEAR)).execute().actionGet();
// Get your facet results
Terms agg1 = sr.getAggregations().get("agg1");
// DateHistogram agg2 = sr.getAggregations().get("agg2");
sr = client.prepareSearch("index1").setTerminateAfter(1000).get();
if (sr.isTerminatedEarly()) {
// We finished early
}
// sr = client.prepareSearch()
// .addAggregation(
// AggregationBuilders.terms("by_country").field("country")
// .subAggregation(AggregationBuilders.dateHistogram("by_year")
// .field("dateOfBirth")
// .interval((DateHistogramInterval.YEAR)
// .subAggregation(AggregationBuilders.avg("avg_children").field("children"))
// )
// ).execute().actionGet();
MetricsAggregationBuilder aggregation = AggregationBuilders.max("agg").field("height");
}
public void testAdmin() {
AdminClient adminClient = client.admin();
IndicesAdminClient indicesAdminClient = client.admin().indices();
client.admin().indices().prepareCreate("twitter")
.setSettings(Settings.builder().put("index.number_of_shards", 3).put("index.number_of_replicas", 2)).get();
client.admin().indices().prepareCreate("twitter").addMapping("tweet", "{\n" + " \"tweet\": {\n" + " \"properties\": {\n"
+ " \"message\": {\n" + " \"type\": \"string\"\n" + " }\n" + " }\n" + " }\n" + " }").get();
ClusterAdminClient clusterAdminClient = client.admin().cluster();
ClusterHealthResponse healths = client.admin().cluster().prepareHealth().get();
String clusterName = healths.getClusterName();
int numberOfDataNodes = healths.getNumberOfDataNodes();
int numberOfNodes = healths.getNumberOfNodes();
for (ClusterIndexHealth health : healths.getIndices().values()) {
String index = health.getIndex();
int numberOfShards = health.getNumberOfShards();
int numberOfReplicas = health.getNumberOfReplicas();
ClusterHealthStatus status = health.getStatus();
}
client.admin().cluster().prepareHealth().setWaitForYellowStatus().get();
client.admin().cluster().prepareHealth("company").setWaitForGreenStatus().get();
client.admin().cluster().prepareHealth("employee").setWaitForGreenStatus().setTimeout(TimeValue.timeValueSeconds(2)).get();
ClusterHealthResponse response = client.admin().cluster().prepareHealth("company").setWaitForGreenStatus().get();
ClusterHealthStatus status = response.getIndices().get("company").getStatus();
if (!status.equals(ClusterHealthStatus.GREEN)) {
throw new RuntimeException("Index is in " + status + " state");
}
}
}