Есть коллекция, а именно - категории, имеющая следующую схему

{
    name: String,
    language: { $type: String, default: "de"}
    translation:[
      {
          language: { $type: String, enum: ["en","fr"]}, 
          name:String
      }
    ]
}

Он имеет данные для конкретного языка, кроме названия, типа - описания и т. Д. Я хочу создать поисковый индекс атласа в поле имени для всех трех языков. Я попытался создать поисковый индекс атласа с 'name' и 'translation.name' , но это не сработало для translation.name. Вот поисковый индекс атласа:

{
  "mappings": {
    "dynamic": false,
    "fields": {
      "name": {
        "analyzer": "lucene.german",
        "type": "string"
      },
      "translation.name": {
        "analyzer": "lucene.french",
        "type": "string"
      }
    }
}

Проблема здесь в том, что если я укажу анализатор языка для translation.name как немецкий, я не смогу применить то же самое для английского. Как можно использовать несколько языковых анализаторов для одного поля?

0
Avani Khabiya 8 Окт 2020 в 12:35

1 ответ

Лучший ответ

В документации по определению индекса для поиска по атласу я нашел ответ на свой запрос, то есть применение нескольких языковых анализаторов для одного поля. Вот ссылка на документацию -

https://docs.atlas.mongodb.com/reference/atlas-search/index-definitions/

И это то, на что я изменил свои сопоставления:

{
  "mappings": {
    "dynamic": false,
    "fields": {
      "name": {
        "analyzer": "lucene.german",
        "type": "string"
      },
      "translation": {
        "type": "document",
        "fields": {
          "name": {
            "multi": {
              "english": {                //english is the name that I have given to this analyzer
                "analyzer": "lucene.english",
                "type": "string"
              },
              "french": {                //french is the name that I have given to this analyzer
                "analyzer": "lucene.french",
                "type": "string"
              }
            }
          }
        }
      }
    }
  }
}
0
Avani Khabiya 10 Ноя 2020 в 08:17