/* * Licensed to Luca Cavanna (the "Author") under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. Elastic Search licenses this * file to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.elasticsearch.shell.client; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.suggest.SuggestBuilder; import org.elasticsearch.shell.client.builders.cluster.ClusterHealthRequestBuilder; import org.elasticsearch.shell.client.builders.cluster.ClusterStateRequestBuilder; import org.elasticsearch.shell.client.builders.cluster.SearchShardsRequestBuilder; import org.elasticsearch.shell.client.builders.core.*; import org.elasticsearch.shell.client.builders.indices.*; import org.elasticsearch.shell.dump.DumpRestorer; import org.elasticsearch.shell.dump.DumpSaver; /** * @author Luca Cavanna * * Internal shell client that exposes operations available on a single index * @param <JsonInput> the shell native object that represents a json object received as input from the shell * @param <JsonOutput> the shell native object that represents a json object that we give as output to the shell */ @SuppressWarnings("unused") public class InternalIndexClient<JsonInput, JsonOutput> { private final AbstractClient<? extends org.elasticsearch.client.support.AbstractClient, JsonInput, JsonOutput> shellClient; private final String indexName; private final boolean alias; public InternalIndexClient(AbstractClient<? extends org.elasticsearch.client.support.AbstractClient, JsonInput, JsonOutput> shellClient, String indexName, boolean alias) { this.shellClient = shellClient; this.indexName = indexName; this.alias = alias; } String indexName() { return indexName; } //Just a shortcut to get all the available types and aliases for this specific index public JsonOutput availableTypes() throws Exception { return shellClient.availableIndices(indexName); } /* Core Apis */ public CountRequestBuilder<JsonInput, JsonOutput> countBuilder() { return shellClient.countBuilder().indices(indexName); } public JsonOutput count() { return countBuilder().execute(); } public JsonOutput count(String queryString) { return countBuilder().queryBuilder(QueryBuilders.queryString(queryString)).execute(); } public JsonOutput count(JsonInput query) { return countBuilder().query(query).execute(); } public DeleteRequestBuilder<JsonInput, JsonOutput> deleteBuilder() { return shellClient.deleteBuilder().index(indexName); } public JsonOutput delete(String type, String id) { return deleteBuilder().type(type).id(id).execute(); } public DeleteByQueryRequestBuilder<JsonInput, JsonOutput> deleteByQueryBuilder() { return shellClient.deleteByQueryBuilder().indices(indexName); } public JsonOutput deleteByQuery(String queryString) { return deleteByQueryBuilder().queryBuilder(QueryBuilders.queryString(queryString)).execute(); } public JsonOutput deleteByQuery(JsonInput query) { return deleteByQueryBuilder().query(query).execute(); } public ExplainRequestBuilder<JsonInput, JsonOutput> explainBuilder() { return shellClient.explainBuilder().index(indexName); } public JsonOutput explain(String type, String id, String queryString) { return explainBuilder().type(type).id(id). queryBuilder(QueryBuilders.queryString(queryString)).execute(); } public JsonOutput explain(String type, String id, JsonInput source) { return explainBuilder().type(type).id(id).source(source).execute(); } public GetRequestBuilder<JsonInput, JsonOutput> getBuilder() { return shellClient.getBuilder().index(indexName); } public JsonOutput get(String type, String id) { return getBuilder().type(type).id(id).execute(); } public IndexRequestBuilder<JsonInput, JsonOutput> indexBuilder() { return shellClient.indexBuilder().index(indexName); } public JsonOutput index(String type, String id, JsonInput source) { return indexBuilder().type(type).id(id).source(source).execute(); } public JsonOutput multiGet(String type, String... ids) { return shellClient.multiGetBuilder().add(indexName, type, ids).execute(); } public JsonOutput multiSearch(JsonInput... sources) { MultiSearchRequestBuilder<JsonInput, JsonOutput> multiSearchRequestBuilder = shellClient.multiSearchBuilder(); if (sources != null) { for (JsonInput source : sources) { multiSearchRequestBuilder.add(indexName, source); } } return multiSearchRequestBuilder.execute(); } public MoreLikeThisRequestBuilder<JsonInput, JsonOutput> moreLikeThisBuilder() { return shellClient.moreLikeThisBuilder(indexName); } public JsonOutput moreLikeThis(String type, String id) { return moreLikeThisBuilder().type(type).id(id).execute(); } public PercolateRequestBuilder<JsonInput, JsonOutput> percolateBuilder() { return shellClient.percolateBuilder().index(indexName); } public JsonOutput percolate(String type, JsonInput source) { return percolateBuilder().type(type).source(source).execute(); } public SearchRequestBuilder<JsonInput, JsonOutput> searchBuilder() { return shellClient.searchBuilder().indices(indexName); } public JsonOutput search() { return searchBuilder().execute(); } public JsonOutput search(String queryString) { return searchBuilder().queryBuilder(QueryBuilders.queryString(queryString)).execute(); } public JsonOutput search(JsonInput source) { return searchBuilder().source(source).execute(); } public SuggestRequestBuilder<JsonInput, JsonOutput> suggestBuilder() { return shellClient.suggestBuilder().indices(indexName); } public JsonOutput suggestTerm(String suggestText, String... fields) { SuggestRequestBuilder<JsonInput, JsonOutput> suggestRequestBuilder = suggestBuilder().suggestText(suggestText); for (String field : fields) { suggestRequestBuilder.addSuggestion(SuggestBuilder.termSuggestion(field).field(field)); } return suggestRequestBuilder.execute(); } public JsonOutput suggestPhrase(String suggestText, String... fields) { SuggestRequestBuilder<JsonInput, JsonOutput> suggestRequestBuilder = suggestBuilder().suggestText(suggestText); for (String field : fields) { suggestRequestBuilder.addSuggestion(SuggestBuilder.phraseSuggestion(field).field(field)); } return suggestRequestBuilder.execute(); } public UpdateRequestBuilder<JsonInput, JsonOutput> updateBuilder() { return shellClient.updateBuilder().index(indexName); } public JsonOutput update(String type, String id, JsonInput doc) { return updateBuilder().type(type).id(id).doc(doc).execute(); } public JsonOutput update(String type, String id, String script) { return updateBuilder().type(type).id(id).script(script).execute(); } public ValidateQueryRequestBuilder<JsonInput, JsonOutput> validateBuilder() { return shellClient.validateBuilder().indices(indexName); } public JsonOutput validate(String queryString) { return validateBuilder().queryBuilder(QueryBuilders.queryString(queryString)).execute(); } public JsonOutput validate(JsonInput query) { return validateBuilder().query(query).execute(); } public DumpSaver<JsonInput>.Builder dumpSaveBuilder() { return shellClient.dumpSaveBuilder().indices(indexName); } public DumpRestorer.Builder dumpRestoreBuilder() { return shellClient.dumpRestoreBuilder().index(indexName); } /* Indices APIs that make sense for a specific index */ protected GetAliasesIndicesRequestBuilder<JsonInput, JsonOutput> aliasesGetBuilder() { return shellClient.indicesApi().aliasesGetBuilder().indices(indexName); } public JsonOutput aliasesGet() { return aliasesGetBuilder().execute(); } protected AnalyzeRequestBuilder<JsonInput, JsonOutput> analyzeBuilder() { return shellClient.indicesApi().analyzeBuilder().index(indexName); } public JsonOutput analyze(String text, String field) { return analyzeBuilder().field(field).text(text).execute(); } public ClearCacheRequestBuilder<JsonInput, JsonOutput> clearCacheBuilder() { return shellClient.indicesApi().clearCacheBuilder().indices(indexName); } public JsonOutput clearCache() { return clearCacheBuilder().execute(); } public CloseIndexRequestBuilder<JsonInput, JsonOutput> closeIndexBuilder() { return shellClient.indicesApi().closeIndexBuilder().index(indexName); } public JsonOutput closeIndex() { return closeIndexBuilder().execute(); } protected DeleteIndexRequestBuilder<JsonInput, JsonOutput> deleteIndexBuilder() { return shellClient.indicesApi().deleteIndexBuilder().indices(indexName); } public JsonOutput deleteIndex() { return deleteIndexBuilder().execute(); } public FlushRequestBuilder<JsonInput, JsonOutput> flushBuilder() { return shellClient.indicesApi().flushBuilder().indices(indexName); } public JsonOutput flush() { return flushBuilder().execute(); } protected GetMappingRequestBuilder<JsonInput, JsonOutput> mappingGetBuilder() { return shellClient.indicesApi().mappingGetBuilder().indices(indexName); } public JsonOutput mappingGet() { return mappingGetBuilder().execute(); } public JsonOutput mappingGet(String... types) { return mappingGetBuilder().types(types).execute(); } protected DeleteMappingRequestBuilder<JsonInput, JsonOutput> mappingDeleteBuilder() { return shellClient.indicesApi().mappingDeleteBuilder().indices(indexName); } public JsonOutput mappingDelete(String type) { return mappingDeleteBuilder().type(type).execute(); } public PutMappingRequestBuilder<JsonInput, JsonOutput> mappingPutBuilder() { return shellClient.indicesApi().mappingPutBuilder().indices(indexName); } public JsonOutput mappingPut(String type, JsonInput source) { return mappingPutBuilder().type(type).source(source).execute(); } public OpenIndexRequestBuilder<JsonInput, JsonOutput> openIndexBuilder() { return shellClient.indicesApi().openIndexBuilder().index(indexName); } public JsonOutput openIndex() { return openIndexBuilder().execute(); } public OptimizeRequestBuilder<JsonInput, JsonOutput> optimizeBuilder() { return shellClient.indicesApi().optimizeBuilder().indices(indexName); } public JsonOutput optimize() { return optimizeBuilder().execute(); } public RefreshRequestBuilder<JsonInput, JsonOutput> refreshBuilder() { return shellClient.indicesApi().refreshBuilder().indices(indexName); } public JsonOutput refresh() { return refreshBuilder().execute(); } protected SegmentsRequestBuilder<JsonInput, JsonOutput> segmentsBuilder() { return shellClient.indicesApi().segmentsBuilder().indices(indexName); } public JsonOutput segments() { return segmentsBuilder().execute(); } protected GetSettingsRequestBuilder<JsonInput, JsonOutput> settingsGetBuilder() { return shellClient.indicesApi().settingsGetBuilder().indices(indexName); } public JsonOutput settingsGet() { return settingsGetBuilder().execute(); } protected UpdateSettingsRequestBuilder<JsonInput, JsonOutput> settingsUpdateBuilder() { return shellClient.indicesApi().settingsUpdateBuilder().indices(indexName); } public JsonOutput settingsUpdate(JsonInput source) { return settingsUpdateBuilder().settings(source).execute(); } public StatsRequestBuilder<JsonInput, JsonOutput> statsBuilder() { return shellClient.indicesApi().statsBuilder().indices(indexName); } public JsonOutput stats() { return statsBuilder().execute(); } public StatusRequestBuilder<JsonInput, JsonOutput> statusBuilder() { return shellClient.indicesApi().statusBuilder().indices(indexName); } public JsonOutput status() { return statusBuilder().execute(); } protected TypesExistsRequestBuilder<JsonInput, JsonOutput> typesExistsBuilder() { return shellClient.indicesApi().typesExistsBuilder().indices(indexName); } public JsonOutput typesExists(String type) { return typesExistsBuilder().types(type).execute(); } public GetWarmerRequestBuilder<JsonInput, JsonOutput> warmerGetBuilder() { return shellClient.indicesApi().warmerGetBuilder().indices(indexName); } public JsonOutput warmerGet() { return warmerGetBuilder().execute(); } protected DeleteWarmerRequestBuilder<JsonInput, JsonOutput> warmerDeleteBuilder() { return shellClient.indicesApi().warmerDeleteBuilder().indices(indexName); } public JsonOutput warmerDelete(String name) { return warmerDeleteBuilder().name(name).execute(); } public JsonOutput warmerDelete() { return warmerDeleteBuilder().execute(); } public JsonOutput warmerPut(String name, JsonInput source) { return shellClient.indicesApi().warmerPutBuilder().name(name).source(indexName, source).execute(); } /* Cluster APIs that make sense for a specific index */ public ClusterHealthRequestBuilder<JsonInput, JsonOutput> clusterHealthBuilder() { return shellClient.clusterApi().healthBuilder().indices(indexName); } public JsonOutput clusterHealth() { return clusterHealthBuilder().execute(); } protected ClusterStateRequestBuilder<JsonInput, JsonOutput> clusterStateBuilder() { return shellClient.clusterApi().stateBuilder().filterIndices(indexName); } public JsonOutput clusterState() { return clusterStateBuilder().execute(); } public SearchShardsRequestBuilder<JsonInput, JsonOutput> searchShardsBuilder() { return shellClient.clusterApi().searchShardsBuilder().indices(indexName); } public JsonOutput searchShards() throws Exception { return searchShardsBuilder().execute(); } @Override public String toString() { return shellClient.toString() + " - " + (alias ? "alias" : "index") + " [" + indexName + "]"; } }