ElasticSearch Java API против ElasticsearchTemplate

С помощью ElasticSearchTemplate я могу легко создать индекс из простого класса сущностей. Скажем, я хочу сохранить Book.java:

@Document(indexName = "bookshop", type = "book", shards = 2, replicas = 2, refreshInterval = "-1")
public class Book {

    @Id
    private String id;
    @Field(type = FieldType.String, store = true)
    private String title;
}

Достаточно просто сделать:

    elasticsearchTemplate.createIndex(Book.class);
    elasticsearchTemplate.putMapping(Book.class);
    elasticsearchTemplate.refresh(Book.class);

Можно ли этого добиться с помощью чистого ES Java API без spring-data-elasticsearch и операций над строками (JSON)?


person mCs    schedule 27.08.2016    source источник


Ответы (1)


На самом деле Java API требует JSON, однако есть ES помощники, поэтому код может быть следующим:

CreateIndexResponse createIndexRequestBuilder = client().admin().indices()
                .prepareCreate(INDEX_NAME)
                .setSource(XContentFactory.jsonBuilder()
                        .startObject()
                        .field("title", "My Title 1")
                        .endObject()
                )
                .setSettings(
                        Settings.settingsBuilder()
                                .put("index.number_of_shards", 2)
                                .put("index.number_of_replicas", 2)
                )
                .execute()
                .actionGet();
person mCs    schedule 27.08.2016