Indices are not being created when using reactive repositories
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
No index was created
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.
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
Most helpful comment
this is implemented since version 4.1 M1 (2020.0.0), so it's available in the milestone repo