Spring-boot: [spring-data-elasticsearch] Reactive repositories are not creating indices automatically

Created on 17 Aug 2020  路  2Comments  路  Source: spring-projects/spring-boot

Description

Indices are not being created when using reactive repositories

Expectation

Given the following configuration:
RestApplication.kt

@SpringBootApplication
@EnableReactiveElasticsearchRepositories
class RestApplication

fun main(args: Array<String>) {
    runApplication<RestApplication>(*args)
}

CustomerRepository

@Repository
interface CustomerRepository : ReactiveCrudRepository<Customer, UUID> {
    fun findByNameOrEmail(
        name: String,
        email: String,
        pageable: Pageable
    ): Flux<Customer>
}

Customer.kt

@Document(
    indexName = "customer",
    shards = 3,
    replicas = 3,
    refreshInterval = "1s",
    createIndex = true
)
@Setting(settingPath = "es-config/analyzers.json")
data class Customer(
    @Id val id: UUID,
    @Field(type = FieldType.Keyword) val firstName: String,
    @Field(type = FieldType.Keyword) val lastName: String,
    @Field(type = FieldType.Text, analyzer = "autocomplete_index", searchAnalyzer = "autocomplete_search") val email: String,
    @Field(type = FieldType.Text, analyzer = "autocomplete_index", searchAnalyzer = "autocomplete_search")
    val name: String = "$firstName $lastName",
    val phoneNumbers: List<String>,
    var createdAt: Long
)

When the application has started
Then the index must have been created with the configured properties

Current behavior

No index was created

Observations

Debugging the code I've noticed that the SimpleElasticsearchRepository extends AbstractElasticsearchRepository which has in its constructor the following code:

        this.indexOperations = operations.indexOps(this.entityClass);
        try {
            if (createIndexAndMapping() && !indexOperations.exists()) {
                createIndex();
                putMapping();
            }
        } catch (Exception exception) {
            LOGGER.warn("Cannot create index: {}", exception.getMessage());
        }

But its reactive sibling SimpleReactiveElasticsearchRepository has no similar strategy or block.

external-project

Most helpful comment

this is implemented since version 4.1 M1 (2020.0.0), so it's available in the milestone repo

All 2 comments

This looks like an issue in the Spring Data Elastic Search project. I've raised a JIRA for them to look into. You can subscribe to https://jira.spring.io/browse/DATAES-906 for updates.

this is implemented since version 4.1 M1 (2020.0.0), so it's available in the milestone repo

Was this page helpful?
0 / 5 - 0 ratings