Многоязычная настройка отображения эластичного поиска

У меня есть документы, хранящиеся в MongoDB, например:

const demoArticle = {
  created: new Date(),
  title: [{
    language: 'english',
    value: 'This is the english title'
  }, {
    language: 'dutch',
    value: 'Dit is de nederlandse titel'
  }]
}

Я хочу добавить анализаторы на определенные языки, которые обычно задаются так:

"mappings": {
   "article": {
      "properties": {
         "created": {
            "type": "date"
         },
         "title.value": {
           "type": "text",
           "analyzer": "english"
         }
      }
   }
}

Однако проблема заключается в том, что в зависимости от языка, установленного на дочернем уровне, он должен иметь набор анализаторов, соответствующий этому же языку.

Я наткнулся на динамические шаблоны в ElasticSearch, но я не был уверен, что это подходит для этого случая использования.

Какие-либо предложения?

Ответ 1

Если вы сопоставляете свойство language MongoDB с точным именем анализаторов языка ES, то все, что вам нужно, по сравнению с рекомендованным Elastic способом, вы просто добавили:

{
  "mappings": {
    "article": {
      "properties": {
        "created": {
          "type": "date"
        },
        "title": {
          "type": "text",
          "fields": {
            "english": {
              "type": "text",
              "analyzer": "english"
            },
            "dutch": {
              "type": "text",
              "analyzer": "dutch"
            },
            "bulgarian": {
              "type": "text",
              "analyzer": "bulgarian"
            }
          }
        }
      }
    }
  }

Таким образом, вы отлично согласитесь на поле language/analyzer между MongoDB и ES.