每个域一种语言 | Elasticsearch: 权威指南 | Elastic
2025-10-25
对于一些实体类,例如:产品、电影、法律声明, 通常这样的一份文本会被翻译成不同语言的文档。虽然这些不同语言的文档可以单独保存在各自的索引中。但另一种更合理的方式是同一份文本的所有翻译统一保存在一个索引中。。
{
"title": "Fight club",
"title_br": "Clube de Luta",
"title_cz": "Klub rváčů",
"title_en": "Fight club",
"title_es": "El club de la lucha",
...
}每份翻译存储在不同的域中,根据域的语言决定使用相应的分析器:
PUT /movies
{
"mappings": {
"movie": {
"properties": {
"title": {
"type": "string"
},
"title_br": {
"type": "string",
"analyzer": "brazilian"
},
"title_cz": {
"type": "string",
"analyzer": "czech"
},
"title_en": {
"type": "string",
"analyzer": "english"
},
"title_es": {
"type": "string",
"analyzer": "spanish"
}
}
}
}
}在维持干净的词频方面,虽然 index-per-language (一种语言一份索引的方法),不像 field-per-language (一种语言一个域的方法)分开索引那么灵活。但是使用 update-mapping API 添加一个新域也很简单,那些新域需要新的自定义分析器,这些新分析器只能在索引创建时被装配。有一个变通的方案,你可以先关闭这个索引 close ,然后使用 update-settings API ,重新打开这个索引,但是关掉这个索引意味着得停止服务一段时间。
官方地址:https://www.elastic.co/guide/cn/elasticsearch/guide/current/one-lang-fields.html