使用 SpringData ElasticSearch 动态索引

Dan*_*iel 5 elasticsearch spring-data spring-data-elasticsearch

如何在运行时参数化 SpringData ElasticSearch 索引?

例如,数据模型:

@Document(indexName = "myIndex")
public class Asset {

    @Id
    public String id;

    // ...
}
Run Code Online (Sandbox Code Playgroud)

和存储库:

public interface AssetRepository extends ElasticsearchCrudRepository<Asset, String> {

    Asset getAssetById(String assetId);
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以myIndex用一个参数替换,但该参数将在实例化/启动期间解决。我们为多个客户/租户提供相同的资产结构,它们有自己的索引。我需要的是这样的:

public interface AssetRepository extends ElasticsearchCrudRepository<Asset, String> {

    Asset getAssetByIdFromIndex(String assetId, String index);
}
Run Code Online (Sandbox Code Playgroud)

或这个

repoInstance.forIndex("myOtherIndex").getAssetById("123");
Run Code Online (Sandbox Code Playgroud)

我知道这不是开箱即用的,但是有没有办法以编程方式“破解”它?

Rah*_*hul 0

org.springframework.data.elasticsearch.repository.ElasticSearchRepository有一个方法

FacetedPage<T> search(SearchQuery searchQuery);
Run Code Online (Sandbox Code Playgroud)

其中 SearchQuery 可以采用多个索引用于搜索。

我希望它能回答