1
votes

I have multiple indices for every day in elasticsearch and I am using ElasticsearchRepository to query my documents. Documents definition:

@Getter
@Setter
@Document(indexName = "fraud-hub-digital-transactions-#{T(java.time.LocalDate).now().toString()}", createIndex = false)
@TypeAlias("fraud-hub-digital-transactions")
public class FraudDigitalTransactions {
    
    @Id
    @Field(name = "transaction_key",type = FieldType.Long)
    private Long transactionId;
    
    @Field(name = "client_no",type = FieldType.Integer)
    private Integer clientNo;
}

My index will create dynamically for every day with this definition

@Document(indexName = "fraud-hub-digital-transactions-#{T(java.time.LocalDate).now().toString()}"

My Repository definition:

@Repository
public interface FraudDigitalTransactionsRepository extends ElasticsearchRepository<FraudDigitalTransactions,String> {
    List<FraudDigitalTransactions> findByClientNo(Integer clientNo);
}

When I query by client no just returning current day values.

@Test
public void testFindByClientNo() {
    List<FraudDigitalTransactions> fraudDigitalTransactions = fraudDigitalTransactionsRepository.findByClientNo(88019237);
    Assert.assertNotEquals(fraudDigitalTransactions.size(),0);
}

Test failed. Current day values returned not searched all indices. Probably Spring data searching a document in current day indexes. Is there any way with spring data to search all indexes? I can do it with elasticsearch high-level client but I want to do with spring data features

1

1 Answers

1
votes

You will need to search with a wildcard or alias and when writing use the index name produced by the bean.

I recently wrote a blog post how to do this with Spring Data Elasticsearch 4.1 using index templates.