Indices Administration

edit

To access indices Java API, you need to call indices() method from an AdminClient:

IndicesAdminClient indicesAdminClient = client.admin().indices();

In the rest of this guide, we will use client.admin().indices().

Create Index

edit

Using an IndicesAdminClient, you can create an index with all default settings and no mapping:

client.admin().indices().prepareCreate("twitter").get();
Index Settings
edit

Each index created can have specific settings associated with it.

client.admin().indices().prepareCreate("twitter")
        .setSettings(Settings.builder()             
                .put("index.number_of_shards", 3)
                .put("index.number_of_replicas", 2)
        )
        .get();                                     

Settings for this index

Execute the action and wait for the result

Put Mapping

edit

You can add mappings at index creation time:

client.admin().indices().prepareCreate("twitter")    
        .addMapping("_doc", "message", "type=text") 
        .get();

Creates an index called twitter

Add a _doc type with a field called message that has the data type text.

There are several variants of the above addMapping method, some taking an XContentBuilder or a Map with the mapping definition as arguments. Make sure to check the javadocs to pick the simplest one for your use case.

The PUT mapping API also allows for updating the mapping after index creation. In this case you can provide the mapping as a String similar to the REST API syntax:

client.admin().indices().preparePutMapping("twitter")   
.setType("_doc")
.setSource("{\n" +
        "  \"properties\": {\n" +
        "    \"name\": {\n" +                           
        "      \"type\": \"text\"\n" +
        "    }\n" +
        "  }\n" +
        "}", XContentType.JSON)
.get();

// You can also provide the type in the source document
client.admin().indices().preparePutMapping("twitter")
.setType("_doc")
.setSource("{\n" +
        "    \"_doc\":{\n" +                            
        "        \"properties\": {\n" +
        "            \"name\": {\n" +
        "                \"type\": \"text\"\n" +
        "            }\n" +
        "        }\n" +
        "    }\n" +
        "}", XContentType.JSON)
.get();

Puts a mapping on existing index called twitter

Adds a new field name to the mapping

The type can be also provided within the source

Refresh

edit

The refresh API allows to explicitly refresh one or more index:

client.admin().indices().prepareRefresh().get(); 
client.admin().indices()
        .prepareRefresh("twitter")               
        .get();
client.admin().indices()
        .prepareRefresh("twitter", "company")   
        .get();

Refresh all indices

Refresh one index

Refresh many indices

Get Settings

edit

The get settings API allows to retrieve settings of index/indices:

GetSettingsResponse response = client.admin().indices()
        .prepareGetSettings("company", "employee").get();                           
for (ObjectObjectCursor<String, Settings> cursor : response.getIndexToSettings()) { 
    String index = cursor.key;                                                      
    Settings settings = cursor.value;                                               
    Integer shards = settings.getAsInt("index.number_of_shards", null);             
    Integer replicas = settings.getAsInt("index.number_of_replicas", null);         
}

Get settings for indices company and employee

Iterate over results

Index name

Settings for the given index

Number of shards for this index

Number of replicas for this index

Update Indices Settings

edit

You can change index settings by calling:

client.admin().indices().prepareUpdateSettings("twitter")   
        .setSettings(Settings.builder()                     
                .put("index.number_of_replicas", 0)
        )
        .get();

Index to update

Settings