gpt4 book ai didi

java - 每个请求如何具有不同的Elastic Spring Data索引

转载 作者:行者123 更新时间:2023-12-02 22:40:55 26 4
gpt4 key购买 nike

我有一个带有索引功能的SpringMvc @RestController。
我想根据要求使用其他索引。例如,如果request参数为“en”,则将使用该索引。我正在尝试使用每种语言的不同分析器创建多语言索引。
据我所知,我需要使用以下注释(我仅使用Java Config)
@Document(index =“zh-cn”)
但是我该如何实时管理呢?

最佳答案

选项1. ES Java客户端API。

您需要使用ElasticsearchClient(ES Java客户端API)手动进行操作。 ElasticsearchRepositoryElasticsearchTemplate不支持此功能。

选项2。在索引名称中使用SpEL。

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

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

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

选项3.自定义ES模板。

或者,实现自定义 ElasticsearchOperations,该代码将为您的实体动态标识和创建每种语言的索引。要标识当前语言环境,请在实体中使用特殊属性,或使用 LocaleContextHolder

关于java - 每个请求如何具有不同的Elastic Spring Data索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30801528/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com