http://blog.csdn.net/changong28/article/details/38445805#comments
3.1 集群的连接
3.1.1 作为Elasticsearch节点
import static org.elasticsearch.node.NodeBuilder.nodeBuilder; import org.elasticsearch.client.Client; import org.elasticsearch.node.Node; Node node = nodeBuilder().clusterName("escluster2").client(true). node(); Client client = node.client();
3.1.2 使用Transport连接
import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "escluster2").build(); TransportClient client = new TransportClient(settings); client.addTransportAddress(new InetSocketTransportAddress("127.0.0.1",9300));
3.2 文档的CRUD
3.2.1 查询文档
GetResponse response = client.prepareGet("library", "book", "1") .setFields("title", "_source") .execute().actionGet();
3.2.2 索引文档
import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.Client; IndexResponse response = client.prepareIndex("library", "book", "2") .setSource("{ "title": "Mastering ElasticSearch"}") .execute().actionGet();
3.2.3 更新文档
import org.elasticsearch.action.update.UpdateResponse; import org.elasticsearch.client.Client; import java.util.Map; import org.elasticsearch.common.collect.Maps; Map<String, Object> params = Maps.newHashMap(); params.put("ntitle", "ElasticSearch Server Book"); UpdateResponse response = client.prepareUpdate("library", "book", "2") .setScript("ctx._source.title = ntitle") .setScriptParams(params) .execute().actionGet();
3.2.4 删除文档
import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.client.Client; DeleteResponse response = client.prepareDelete("library", "book", "2") .execute().actionGet();
3.3 Elasticsearch检索
3.3.1 Preparing a query
import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.Client; import org.elasticsearch.search.SearchHit; SearchResponse response = client.prepareSearch("library") .addFields("title", "_source") .execute().actionGet(); for(SearchHit hit: response.getHits().getHits()) { <span style="white-space:pre"> </span>System.out.println(hit.getId()); <span style="white-space:pre"> </span>if (hit.getFields().containsKey("title")) { <span style="white-space:pre"> </span>System.out.println("field.title: "+ hit.getFields().get("title").getValue()); <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>System.out.println("source.title: " + hit.getSource().get("title")); }
3.3.2 Building queries
import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; QueryBuilder queryBuilder = QueryBuilders .disMaxQuery() .add(QueryBuilders.termQuery("title", "Elastic")) .add(QueryBuilders.prefixQuery("title", "el")); System.out.println(queryBuilder.toString()); SearchResponse response = client.prepareSearch("library") .setQuery(queryBuilder) .execute().actionGet();
3.3.3 Using the match all documents query
queryBuilder = QueryBuilders.matchAllQuery() .boost(11f).normsField("title");
3.3.4 The match query
queryBuilder = QueryBuilders .matchQuery("message", "a quick brown fox") .operator(Operator.AND) .zeroTermsQuery(ZeroTermsQuery.ALL);
3.3.5 Using the geo shape query
queryBuilder = QueryBuilders.geoShapeQuery("location", ShapeBuilder.newRectangle() .topLeft(13, 53) .bottomRight(14, 52) .build());
3.3.6 Paging query
SearchResponse response = client.prepareSearch("library") .setQuery(QueryBuilders.matchAllQuery()) .setFrom(10) .setSize(20) .execute().actionGet();
3.3.7 Sorting
SearchResponse response = client.prepareSearch("library") .setQuery(QueryBuilders.matchAllQuery()) .addSort(SortBuilders.fieldSort("title")) .addSort("_score", SortOrder.DESC) .execute().actionGet()
3.3.8 Filtering
FilterBuilder filterBuilder = FilterBuilders .andFilter( FilterBuilders.existsFilter("title").filterName("exist"), FilterBuilders.termFilter("title", "elastic") ); SearchResponse response = client.prepareSearch("library") .setFilter(filterBuilder) .execute().actionGet();
3.3.9 Faceting
FacetBuilder facetBuilder = FacetBuilders .filterFacet("test") .filter(FilterBuilders.termFilter("title", "elastic")); SearchResponse response = client.prepareSearch("library") .addFacet(facetBuilder) .execute().actionGet();
3.3.10 Highlighting
SearchResponse response = client.prepareSearch("wikipedia") .addHighlightedField("title") .setQuery(QueryBuilders.termQuery("title", "actress")) .setHighlighterPreTags("<1>", "<2>") .setHighlighterPostTags("</1>", "</2>") .execute().actionGet(); for(SearchHit hit: response.getHits().getHits()) { <span style="white-space:pre"> </span>HighlightField hField = hit.getHighlightFields().get("title"); <span style="white-space:pre"> </span>for (Text t : hField.fragments()) { <span style="white-space:pre"> </span>System.out.println(t.string()); <span style="white-space:pre"> </span>} }
3.3.11 Suggestions
SearchResponse response = client.prepareSearch("wikipedia") .setQuery(QueryBuilders.matchAllQuery()) .addSuggestion(new TermSuggestionBuilder("first_suggestion") .text("graphics designer") .field("_all")) .execute().actionGet(); for( Entry<? extends Option> entry : response.getSuggest().getSuggestion("first_suggestion").getEntries()) { <span style="white-space:pre"> </span>System.out.println("Check for: " + entry.getText() + ". Options:"); <span style="white-space:pre"> </span>for( Option option : entry.getOptions()) { <span style="white-space:pre"> </span>System.out.println(" " + option.getText()); <span style="white-space:pre"> </span>} }
3.3.12 Counting
CountResponse response = client.prepareCount("library") .setQuery(QueryBuilders.termQuery("title", "elastic")) .execute().actionGet();
3.3.13 Scrolling
SearchResponse responseSearch = client.prepareSearch("library") .setScroll("1m") .setSearchType(SearchType.SCAN) .execute().actionGet(); String scrollId = responseSearch.getScrollId(); SearchResponse response = client.prepareSearchScroll(scrollId).execute().actionGet();
3.3.14 Bulk
BulkResponse response = client.prepareBulk() .add(client.prepareIndex("library", "book", "5") .setSource("{ "title" : "Solr Cookbook"}") .request()) .add(client.prepareDelete("library", "book", "2").request()).execute().actionGet();
3.3.15 The delete by query
DeleteByQueryResponse response = client.prepareDeleteByQuery("library") .setQuery(QueryBuilders.termQuery("title", "ElasticSearch")) .execute().actionGet();
3.3.16 Multi GET
MultiGetResponse response = client.prepareMultiGet() .add("library", "book", "1", "2") .execute().actionGet();
3.3.16 Multi Search
MultiSearchResponse response = client.prepareMultiSearch() .add(client.prepareSearch("library", "book").request()) .add(client.prepareSearch("news"). .setFilter(FilterBuilders.termFilter("tags", "important"))) .execute().actionGet();
3.3.17 Building JSON queries and documents
IndexResponse response = client .prepareIndex("library", "book", "2") .setSource("{ "title": "Mastering ElasticSearch"}") .execute().actionGet(); Map<String, Object> m = Maps.newHashMap(); m.put("1", "Introduction"); m.put("2", "Basics"); m.put("3", "And the rest"); XContentBuilder json = XContentFactory.jsonBuilder().prettyPrint() .startObject() .field("id").value("2123") .field("lastCommentTime", new Date()) .nullField("published") .field("chapters").map(m) .field("title", "Mastering ElasticSearch") .array("tags", "search", "ElasticSearch", "nosql") .field("values") .startArray() .value(1) .value(10) .endArray() .endObject();
3.4 The administration API
3.4.1 The cluster administration API
3.4.1.1 The cluster and indices health API
ClusterHealthResponse response = client.admin().cluster() .prepareHealth("library") .execute().actionGet();
3.4.1.2 The cluster state API
ClusterStateResponse response = client.admin().cluster() .prepareState() .execute().actionGet();
3.4.1.3 The update settings API
Map<String, Object> map = Maps.newHashMap(); map.put("indices.ttl.interval", "10m"); ClusterUpdateSettingsResponse response = client.admin().cluster() .prepareUpdateSettings() .setTransientSettings(map) .execute().actionGet();
3.4.1.4 The reroute API
ClusterRerouteResponse response = client.admin().cluster() .prepareReroute() .setDryRun(true) .add(new MoveAllocationCommand(new ShardId("library", 3), "G3czOt4HQbKZT1RhpPCULw",PvHtEMuRSJ6rLJ27AW3U6w"), new CancelAllocationCommand(new ShardId("library", 2), "G3czOt4HQbKZT1RhpPCULw",rue)) .execute().actionGet();
3.4.1.5 The nodes information API
NodesInfoResponse response = client.admin().cluster() .prepareNodesInfo() .setNetwork(true) .setPlugin(true) .execute().actionGet();
3.4.1.6 The node statistics API
NodesStatsResponse response = client.admin().cluster() .prepareNodesStats() .all() .execute().actionGet();
3.4.1.7 The nodes hot threads API
NodesHotThreadsResponse response = client.admin().cluster() .prepareNodesHotThreads() .execute().actionGet();
3.4.1.8 The nodes shutdown API
NodesShutdownResponse response = client.admin().cluster() .prepareNodesShutdown() .execute().actionGet();
3.4.1.9 The search shards API
ClusterSearchShardsResponse response = client.admin().cluster() .prepareSearchShards() .setIndices("library") .setRouting("12") .execute().actionGet();
3.4.2 The Indices administration API
3.4.2.1 The index existence API
IndicesExistsResponse response = client.admin().indices() .prepareExists("books", "library") .execute().actionGet();
3.4.2.2 The Type existence API
TypesExistsResponse response = client.admin().indices() .prepareTypesExists("library") .setTypes("book") .execute().actionGet();
3.4.2.3 The indices stats API
IndicesStatsResponse response = client.admin().indices() .prepareStats("library") .all() .execute().actionGet();
3.4.2.4 Index status
IndicesStatusResponse response = client.admin().indices() .prepareStatus("library") .setRecovery(true) .setSnapshot(true) .execute().actionGet();
3.4.2.5 Segments information API
IndicesSegmentResponse response = client.admin().indices() .prepareSegments("library") .execute().actionGet();
3.4.2.6 Creating an index API
CreateIndexResponse response = client.admin().indices() .prepareCreate("news") .setSettings(ImmutableSettings.settingsBuilder() .put("number_of_shards", 1)) .addMapping("news", XContentFactory.jsonBuilder() .startObject() .startObject("news") .startObject("properties") .startObject("title") .field("analyzer", "whitespace") .field("type", "string") .endObject() .endObject() .endObject() .endObject()) .execute().actionGet();
3.4.2.7 Deleting an index
DeleteIndexResponse response = client.admin().indices() .prepareDelete("news") .execute().actionGet();
3.4.2.8 Closing an index
CloseIndexResponse response = client.admin().indices() .prepareClose("library") .execute().actionGet();
3.4.2.9 Opening an index
OpenIndexResponse response = client.admin().indices() .prepareOpen("library") .execute().actionGet();
3.4.2.10 The Refresh API
RefreshResponse response = client.admin().indices() .prepareRefresh("library") .execute().actionGet();
3.4.2.11 The Flush API
FlushResponse response = client.admin().indices() .prepareFlush("library") .setFull(false) .execute().actionGet();
3.4.2.12 The Optimize API
OptimizeResponse response = client.admin().indices() .prepareOptimize("library") .setMaxNumSegments(2) .setFlush(true) .setOnlyExpungeDeletes(false) .execute().actionGet();
3.4.2.13 The put mapping API
PutMappingResponse response = client.admin().indices() .preparePutMapping("news") .setType("news") .setSource(XContentFactory.jsonBuilder() .startObject() .startObject("news") .startObject("properties") .startObject("title") .field("analyzer", "whitespace") .field("type", "string") .endObject() .endObject() .endObject() .endObject()) .execute().actionGet();
3.4.2.14 The delete mapping API
DeleteMappingResponse response = client.admin().indices() .prepareDeleteMapping("news") .setType("news") .execute().actionGet();
3.4.2.15 The gateway snapshot API
GatewaySnapshotResponse response = client.admin().indices() .prepareGatewaySnapshot("news") .execute().actionGet();
3.4.2.16 The aliases API
IndicesAliasesResponse response = client.admin().indices() .prepareAliases() .addAlias("news", "n") .addAlias("library", "elastic_books", FilterBuilders.termFilter("title", "elasticsearch")) .removeAlias("news", "current_news") .execute().actionGet();
3.4.2.17 The get aliases API
IndicesGetAliasesResponse response = client.admin().indices() .prepareGetAliases("elastic_books", "n") .execute().actionGet();
3.4.2.18 The aliases exists API
AliasesExistResponse response = client.admin().indices() .prepareAliasesExist("elastic*", "unknown") .execute().actionGet();
3.4.2.19 The clear cache API
ClearIndicesCacheResponse response = client.admin().indices() .prepareClearCache("library") .setFieldDataCache(true) .setFields("title") .setFilterCache(true) .setIdCache(true) .execute().actionGet();
3.4.2.20 The update settings API
UpdateSettingsResponse response = client.admin().indices() .prepareUpdateSettings("library") .setSettings(ImmutableSettings.builder() .put("index.number_of_replicas", 2)) .execute().actionGet();
3.4.2.21 The analyze API
AnalyzeResponse response = client.admin().indices() .prepareAnalyze("library", "ElasticSearch Servers") .setTokenizer("whitespace") .setTokenFilters("nGram") .execute().actionGet();
3.4.2.22 The put template API
-
PutIndexTemplateResponse response = client.admin().indices() .preparePutTemplate("my_template") .setTemplate("product*") .setSettings(ImmutableSettings.builder() .put("index.number_of_replicas", 2) .put("index.number_of_shards", 1)) .addMapping("item", XContentFactory.jsonBuilder() .startObject() .startObject("item") .startObject("properties") .startObject("title") .field("type", "string") .endObject() .endObject() .endObject() .endObject()) .execute().actionGet();
3.4.2.23 The delete template API
DeleteIndexTemplateResponse response = client.admin().indices() .prepareDeleteTemplate("my_*") .execute().actionGet();
3.4.2.24 The validate query API
ValidateQueryResponse response = client.admin().indices() .prepareValidateQuery("library") .setExplain(true) .setQuery(XContentFactory.jsonBuilder() .startObject() .field("name").value("elastic search") .endObject().bytes()) .execute().actionGet();
3.4.2.25 The put warmer API
PutWarmerResponse response = client.admin().indices() .preparePutWarmer("library_warmer") .setSearchRequest(client.prepareSearch("library") .addFacet(FacetBuilders .termsFacet("tags").field("tags"))) .execute().actionGet();
3.4.2.26 The delete warmer API
DeleteWarmerResponse response = client.admin().indices() .prepareDeleteWarmer() .setName("library_*") .execute().actionGet();