如何为每个请求提供不同的弹性Spring数据索引

时间:2015-06-12 11:05:51

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

我有一个带有索引功能的SpringMvc @RestController。

我希望根据请求使用不同的索引。例如,如果请求参数是“en”,那么要使用的索引就是那个。我正在尝试使用不同的语言分析器制作多语言索引。

据我所知,我需要注释(我只使用Java Config)我的POJO

@Document(索引= “EN”)

但我如何管理这个实时?

1 个答案:

答案 0 :(得分:0)

选项1. ES Java客户端API。

您需要使用https://example.com/libraries/index.abcd1234.js(ES Java客户端API)手动进行操作。 ElasticsearchClientElasticsearchRepository不支持此功能。

选项2。在索引名称中输入SpEL。

您可以在索引名称中使用SpEL,但是您必须自己为每种语言创建索引(例如,在应用程序启动时)。

ElasticsearchTemplate

提示:使用Index templates重用每种语言的索引设置。

选项3.自定义ES模板。

或者,实现自定义@Document(index="mydoc-#{@myLocaleService.currentLocale}") @Settings("myindex-settings.json") public class MyDoc { String id; Locale locale; String content; } @Service MyLocaleService { public Locale getCurrentLocale() { return LocaleContextHolder.getLocale(); } } interface MyDocRepository extends ElasticsearchRepository<MyDoc, String>() { } @Service MyDocService { @Autowired MyDocRepository repository; public void saveToIndex(MyDoc entity){ try { LocaleContext savedLocaleCtx = LocaleContextHolder.getLocaleContext(); LocaleContextHolder.setLocale(entity.getLocale()); myDocRepo.save(entity); } finally { LocaleContextHolder.setLocaleContext(savedLocaleCtx); } } } ,该自定义ElasticsearchOperations将为您的实体动态标识和创建每种语言的索引。要标识当前语言环境,请在实体中使用特殊属性,或使用LocaleContextHolder