【问题标题】:Spring data elasticsearch query on multiple indices多个索引上的Spring数据弹性搜索查询
【发布时间】:2021-03-09 16:31:49
【问题描述】:

我在 elasticsearch 中每天都有多个索引,我正在使用 ElasticsearchRepository 来查询我的文档。文件定义:

@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;
}

我的索引将使用此定义为每一天动态创建

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

我的存储库定义:

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

当我通过客户端查询时,不只是返回当前日期值。

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

测试失败。返回的当天值未搜索所有索引。 可能是 Spring 数据在当前索引中搜索文档。 spring 数据有什么方法可以搜索所有索引吗?我可以使用 elasticsearch 高级客户端,但我想使用 spring 数据功能

【问题讨论】:

    标签: java spring spring-boot elasticsearch spring-data-elasticsearch


    【解决方案1】:

    您需要使用通配符或别名进行搜索,并在编写时使用 bean 生成的索引名称。

    我最近写了一篇blog post 如何使用索引模板在 Spring Data Elasticsearch 4.1 中做到这一点。

    【讨论】:

    • 太棒了。 Spring团队真的很主动。谢谢。
    • 我不是 Spring 团队的一员; Spring Data Elasticsearch 是一个社区项目 ;-)
    • Indexes puttemplate 命令在索引文档不存在时不起作用。我尝试手动创建索引并从logstash批量上传数据,spring应用程序无法为该索引提供别名。
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2021-08-16
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多