每份文档一种语言 | Elasticsearch: 权威指南 | Elastic
2025-10-31
每个主语言文档 
只需要相当简单的设置。 不同语言的文档被分别存放在不同的索引中 — blogs-en 、
blogs-fr , 如此等等 — 这样每个索引就可以使用相同的类型和相同的域,只是使用不同的分析器:
PUT /blogs-en
{
  "mappings": {
    "post": {
      "properties": {
        "title": {
          "type": "string",  "fields": {
            "stemmed": {
              "type":     "string",
              "analyzer": "english"
          "fields": {
            "stemmed": {
              "type":     "string",
              "analyzer": "english"  }
}}}}}}
PUT /blogs-fr
{
  "mappings": {
    "post": {
      "properties": {
        "title": {
          "type": "string",
            }
}}}}}}
PUT /blogs-fr
{
  "mappings": {
    "post": {
      "properties": {
        "title": {
          "type": "string",  "fields": {
            "stemmed": {
              "type":     "string",
              "analyzer": "french"
          "fields": {
            "stemmed": {
              "type":     "string",
              "analyzer": "french"  }
}}}}}}
            }
}}}}}}这个方法干净且灵活。新语言很容易被添加 — 仅仅是创建一个新索引--因为每种语言都是彻底的被分开, 我们不用遭受在 混合语言的陷阱 中描述的词频和词干提取的问题。
每一种语言的文档都可被独立查询,或者通过查询多种索引来查询多种语言。
我们甚至可以使用 indices_boost 参数为特定的语言添加优先权
:
GET /blogs-*/post/_search{ "query": { "multi_match": { "query": "deja vu", "fields": [ "title", "title.stemmed" ]
"type": "most_fields" } }, "indices_boost": {
"blogs-en": 3, "blogs-fr": 2 } }
| 
这个查询会在所有以  | |
| 
 | |
| 也许用户接受语言标头表明,更倾向于英语,然后是法语,所以相应的,我们会为每个索引的结果添加权重。任何其他语言会有一个中性的权重 1 。 | 
官方地址:https://www.elastic.co/guide/cn/elasticsearch/guide/current/one-lang-docs.html