我有一个带有索引功能的SpringMvc @RestController。
我希望根据请求使用不同的索引。例如,如果请求参数是“en”,那么要使用的索引就是那个。我正在尝试使用不同的语言分析器制作多语言索引。
据我所知,我需要注释(我只使用Java Config)我的POJO
@Document(索引= “EN”)
但我如何管理这个实时?
答案 0 :(得分:0)
选项1. ES Java客户端API。
您需要使用https://example.com/libraries/index.abcd1234.js
(ES Java客户端API)手动进行操作。 ElasticsearchClient
和ElasticsearchRepository
不支持此功能。
选项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
。