Support of Elasticsearch for Spring Data CAST supports Elasticsearch via
its com.castsoftware.nosqljava external link
extension. Details about how this support is provided for Java with Spring Data source code is discussed below.
Supported Client Libraries Supported Operations Insert com.github.vanroy.springdata.jest.JestElasticsearchTemplate com.github.vanroy.springdata.jest.JestElasticsearchTemplate.prepareIndex com.github.vanroy.springdata.jest.JestElasticsearchTemplate.putMapping com.github.vanroy.springdata.jest.JestElasticsearchTemplate.createIndex com.github.vanroy.springdata.jest.JestElasticsearchTemplate.createIndexIfNotCreated com.github.vanroy.springdata.jest.JestElasticsearchTemplate.createIndexWithSettings com.github.vanroy.springdata.jest.JestElasticsearchTemplate.prepareIndex com.github.vanroy.springdata.jest.JestElasticsearchTemplate.putMapping org.springframework.data.elasticsearch.core org.springframework.data.elasticsearch.core.ReactiveElasticsearchTemplate.saveAll org.springframework.data.elasticsearch.core.ReactiveDocumentOperations.saveAll org.springframework.data.elasticsearch.core.IndexOperations.create org.springframework.data.elasticsearch.core.IndexOperations.putMapping org.springframework.data.elasticsearch.core.AbstractElasticsearchTemplate.save org.springframework.data.elasticsearch.core.AbstractReactiveElasticsearchTemplate.save org.springframework.data.elasticsearch.core.ReactiveElasticsearchOperations.save org.springframework.data.elasticsearch.core.ReactiveDocumentOperations.save org.springframework.data.elasticsearch.core.ReactiveDocumentOperations.saveAll org.springframework.data.elasticsearch.core.ReactiveElasticsearchTemplate.saveAll org.springframework.data.elasticsearch.core.ReactiveIndexOperations.create org.springframework.data.elasticsearch.core.ReactiveIndexOperations.putMapping org.springframework.data.repository org.springframework.data.repository.CrudRepository.save org.springframework.data.repository.CrudRepository.saveAll org.springframework.data.repository.ElasticsearchRepository.save org.springframework.data.repository.ElasticsearchRepository.saveAll org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchIndicesClient.create org.springframework.data.elasticsearch.client.reactive.ReactiveElasticsearchClient.Indices.createIndex Select Update com.github.vanroy.springdata.jest.JestElasticsearchTemplate com.github.vanroy.springdata.jest.JestElasticsearchTemplate.bulkUpdate com.github.vanroy.springdata.jest.JestElasticsearchTemplate.prepareUpdate com.github.vanroy.springdata.jest.JestElasticsearchTemplate.update com.github.vanroy.springdata.jest.JestElasticsearchTemplate.bulkIndex org.springframework.data.elasticsearch.client org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchClient.bulk org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchClient.index org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchClient.update org.springframework.data.elasticsearch.client.reactive.ReactiveElasticsearchClient.bulk org.springframework.data.elasticsearch.client.reactive.ReactiveElasticsearchClient.index org.springframework.data.elasticsearch.client.reactive.ReactiveElasticsearchClient.update org.springframework.data.elasticsearch.core.AbstractReactiveElasticsearchTemplate org.springframework.data.elasticsearch.core.AbstractReactiveElasticsearchTemplate.bulkUpdate org.springframework.data.elasticsearch.core.AbstractReactiveElasticsearchTemplate.bulkIndex org.springframework.data.elasticsearch.core.AbstractReactiveElasticsearchTemplate.index org.springframework.data.elasticsearch.core.AbstractReactiveElasticsearchTemplate.update org.springframework.data.elasticsearch.core.AbstractElasticsearchTemplate org.springframework.data.elasticsearch.core.AbstractElasticsearchTemplate.bulkUpdate org.springframework.data.elasticsearch.core.AbstractElasticsearchTemplate.bulkIndex org.springframework.data.elasticsearch.core.AbstractElasticsearchTemplate.index org.springframework.data.elasticsearch.core.AbstractElasticsearchTemplate.update org.springframework.data.elasticsearch.core.ReactiveDocumentOperations.update org.springframework.data.elasticsearch.core.ReactiveDocumentOperations.updateByQuery org.springframework.data.elasticsearch.core.DocumentOperations.bulkIndex org.springframework.data.elasticsearch.core.DocumentOperations.bulkUpdate Delete org.springframework.data.repository.CrudRepository org.springframework.data.repository.CrudRepository.delete org.springframework.data.repository.CrudRepository.deleteById org.springframework.data.repository.CrudRepository.deleteAllById org.springframework.data.repository.CrudRepository.deleteAll org.springframework.data.repository.ElasticsearchRepositoryy org.springframework.data.repository.ElasticsearchRepository.delete org.springframework.data.repository.ElasticsearchRepository.deleteById org.springframework.data.repository.ElasticsearchRepository.deleteAllById org.springframework.data.repository.ElasticsearchRepository.deleteAll org.springframework.data.repository.reactive.ReactiveCrudRepository org.springframework.data.repository.reactive.ReactiveCrudRepository.delete org.springframework.data.repository.reactive.ReactiveCrudRepository.deleteAll org.springframework.data.repository.reactive.ReactiveCrudRepository.deleteById org.springframework.data.repository.reactive.ReactiveCrudRepository.deleteAllById org.springframework.data.repository.reactive.ReactiveElasticsearchRepository org.springframework.data.repository.reactive.ReactiveElasticsearchRepository.delete org.springframework.data.repository.reactive.ReactiveElasticsearchRepository.deleteAll org.springframework.data.repository.reactive.ReactiveElasticsearchRepository.deleteById org.springframework.data.repository.reactive.ReactiveElasticsearchRepository.deleteAllById org.springframework.data.elasticsearch.core org.springframework.data.elasticsearch.core.ElasticsearchTemplate.delete org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate.delete org.springframework.data.elasticsearch.core.ReactiveElasticsearchTemplate.delete org.springframework.data.elasticsearch.core.DocumentOperations.delete org.springframework.data.elasticsearch.core.ReactiveDocumentOperations.delete org.springframework.data.elasticsearch.core.IndexOperations.delete org.springframework.data.elasticsearch.core.ElasticsearchTemplate.deleteIndex org.springframework.data.elasticsearch.core.AbstractElasticsearchTemplate.delete org.springframework.data.elasticsearch.core.AbstractReactiveElasticsearchTemplate.delete org.springframework.data.elasticsearch.core.ReactiveElasticsearchOperations.delete org.springframework.data.elasticsearch.core.ReactiveElasticsearchOperations.deleteById org.springframework.data.elasticsearch.core.ReactiveElasticsearchOperations.deleteBy org.springframework.data.elasticsearch.core.ReactiveDocumentOperations.delete org.springframework.data.elasticsearch.core.ElasticsearchTemplate.delete org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate.delete org.springframework.data.elasticsearch.core.ReactiveElasticsearchTemplate.delete org.springframework.data.elasticsearch.core.DocumentOperations.delete org.springframework.data.elasticsearch.core.ReactiveIndexOperations.delete org.springframework.data.elasticsearch.client org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchClient.delete org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchClient.deleteByQuery org.springframework.data.elasticsearch.client.reactive.ReactiveElasticsearchClient.delete org.springframework.data.elasticsearch.client.reactive.ReactiveElasticsearchClient.deleteByQuery org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchIndicesClient.delete org.springframework.data.elasticsearch.client.reactive.ReactiveElasticsearchClient.Indices.deleteIndex com.github.vanroy.springdata.jest.JestElasticsearchTemplate.delete
Objects Java Elasticsearch Cluster Java Elasticsearch Index Java Unknown Elasticsearch Cluster Java Unknown Elasticsearch Index
Links All links are created between Elasticsearch Cluster object and
Elasticsearch Index objects:
parentLink - useDeleteLink delete deleteAll deleteById deleteAllById useInsertLink save saveAll useSelectLink findAllById findAll findById count existsById searchSimilar indexOps get multiGet search useUpdateLink
bulkUpdate
What results can you expect? Some example scenarios are shown below:
Cluster and Index Creation public class EsConfig {
@Autowired
private EsSinkProperties properties ;
@Bean
public Client client () throws Exception {
Settings esSettings = Settings . builder ()
. put ( "cluster.name" , properties . getClusterName ())
. build ();
TransportClient client = new PreBuiltTransportClient ( esSettings )
. addTransportAddress ( new InetSocketTransportAddress ( InetAddress . getByName ( properties . getHost ()), Integer . parseInt ( properties . getPort ())));
}
}
public class EsSinkProperties {
/
* Elasticsearch cluster name .
*/
private String clusterName = "elasticsearch" ;
/
* Elasticsearch host name .
*/
private String host = "localhost" ;
/
* Elasticsearch native port .
*/
private String port = "9300" ;
@NotBlank
public String getClusterName () {
return clusterName ;
}
public void setClusterName ( String clusterName ) {
this . clusterName = clusterName ;
}
}
@Document ( indexName = "trader" , type = "trade" )
public class Trade {
@Id
private String id ;
public String getId () {
return id ;
}
public void setId ( String id ) {
this . id = id ;
}
Insert Operation public override void Configure ( EntityTypeBuilder < Contractor > builder )
{
builder . ToTable ( "Trial" );
builder . OwnsOne ( m => m . Name , a =>
{
a . Property ( p => p . FirstName ). HasMaxLength ( 300 )
. HasColumnName ( "FirstName" )
. HasDefaultValue ( "" );
a . Property ( p => p . LastName ). HasMaxLength ( 300 )
. HasColumnName ( "LastName" )
. HasDefaultValue ( "" );
a . Ignore ( p => p . FullName );
});
public Book save ( Book book ) {
return bookRepository . save ( book );
}
Delete Operation public void delete ( Book book ) {
bookRepository . delete ( book );
}
Select Operation public Iterable < Book > findAll () {
return bookRepository . findAll ();
}
Query Methods public interface BookRepository extends ElasticsearchRepository < Book , String > {
Page < Book > findByAuthor ( String author , Pageable pageable );
List < Book > findByTitle ( String title );
}
public Page < Book > findByAuthor ( String author , PageRequest pageRequest ) {
return bookRepository . findByAuthor ( author , pageRequest );
}
Elasticsearch Operations / Elasticsearch Template public void deleteIndex () {
operations . indexOps ( Conference . class ). delete ();
}
ReactiveElasticsearchClient import org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchClient ;
@Repository
public class ElasticRepository {
public static final String COURSE_INDEX = "course-store" ;
private final ReactiveElasticsearchClient client ;
private final ObjectMapper objectMapper ;
public ElasticRepository ( ReactiveElasticsearchClient client , ObjectMapper objectMapper ) {
this . client = client ;
this . objectMapper = objectMapper ;
}
public Mono < DeleteResponse > deleteCourse () {
return client . delete ( deleteRequest -> deleteRequest . index ( COURSE_INDEX ));
}
}
Known Limitations Index is created as unknown, if the name is not retrieved from the
properties file or if the name could not be resolved. Limited support for Spring Data Elasticsearch 3.xIn 3.x, CRUD operations performed using ElasticsearchRepository
are supported In 3.x no support for CRUD operations performed using
ElasticsearchTemplate. However, if the user configures version
3.x jars inside its class path, then ElasticsearchTemplate will
produce links.