原文地址: https://www.elastic.co/guide/cn/elasticsearch/guide/current/one-lang-fields.html, 版权归 www.elastic.co 所有
英文版地址: https://www.elastic.co/guide/en/elasticsearch/guide/current/one-lang-fields.html
英文版地址: https://www.elastic.co/guide/en/elasticsearch/guide/current/one-lang-fields.html
请注意:
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
每个域一种语言edit
对于一些实体类,例如:产品、电影、法律声明, 通常这样的一份文本会被翻译成不同语言的文档。虽然这些不同语言的文档可以单独保存在各自的索引中。但另一种更合理的方式是同一份文本的所有翻译统一保存在一个索引中。。
{ "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 ,重新打开这个索引,但是关掉这个索引意味着得停止服务一段时间。
文档的一种语言可以单独查询,也可以通过查询多个域来查询多种语言。我们甚至可以通过对特定语言设置偏好来提高字段优先级: