Elasticsearch: определение корневого сопоставления имеет неподдерживаемый параметр

Я создаю способ поиска слов на тайском языке с помощью Elasticsearch и Kibana. У меня проблема с отображением.

PUT test
{
  "settings": {
    "analysis": {
      "analyzer": {
        "trigrams": {
          "tokenizer": "trigram_tokenizer",
          "filter": [
            "lowercase"
          ]
        }
      },
      "tokenizer": {
        "trigram_tokenizer": {
          "type": "ngram",
          "min_ngram": 3,
          "max_ngram": 3,
          "token_chars": []
        }
      }
    }
  },
  "mappings": {
    "true_name": {
      "properties": {
        "correct": { "type": "text", "analyzer": "trigrams" }
      }
    }
  }
}

И ошибка такая

{
  "error" : {
    "root_cause" : [
      {
        "type" : "mapper_parsing_exception",
        "reason" : "Root mapping definition has unsupported parameters:  [true_name : {properties = {correct = {analyzer=trigrams, type=text}}}]"
      }
    ],
    "type" : "mapper_parsing_exception",
    "reason" : "Failed to parse mapping [_doc]: Root mapping definition has unsupported parameters:  [true_name : {properties = {correct = {analyzer=trigrams, type=text}}}]",
    "caused_by" : {
      "type" : "mapper_parsing_exception",
      "reason" : "Root mapping definition has unsupported parameters:  [true_name : {properties = {correct = {analyzer=trigrams, type=text}}}]"
    }
  },
  "status" : 400
}

2
0
3 220
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Типы сопоставления устарели. Обратитесь к этой документации, чтобы узнать больше об удалении типов сопоставления.

Индексы, созданные в Elasticsearch 6.0.0 или более поздней версии, могут содержать только единый тип отображения. Индексы, созданные в версии 5.x с множественным отображением типы будут продолжать работать, как и раньше, в Elasticsearch 6.x. Типы будет объявлен устаревшим в API в Elasticsearch 7.0.0 и полностью удалено в 8.0.0.
{
  "settings": {
    "analysis": {
      "analyzer": {
        "trigrams": {
          "tokenizer": "trigram_tokenizer",
          "filter": [
            "lowercase"
          ]
        }
      },
      "tokenizer": {
        "trigram_tokenizer": {
          "type": "ngram",
          "min_ngram": 3,
          "max_ngram": 3,
          "token_chars": []
        }
      }
    }
  },
  "mappings": {            // note this
    "properties": {
      "correct": {
        "type": "text",
        "analyzer": "trigrams"
      }
    }
  }
}

Если ваш документ JSON выглядит так:

{
  "true_name": {
    "correct": "mapping types deprecated"
  }
}

Тогда отображение индекса будет -

{
  "settings": {
    "analysis": {
      "analyzer": {
        "trigrams": {
          "tokenizer": "trigram_tokenizer",
          "filter": [
            "lowercase"
          ]
        }
      },
      "tokenizer": {
        "trigram_tokenizer": {
          "type": "ngram",
          "min_ngram": 3,
          "max_ngram": 3,
          "token_chars": []
        }
      }
    }
  },
  "mappings": {
    "properties": {              // note this
      "true_name": {
        "properties": {
          "correct": {
            "type": "text",
            "analyzer": "trigrams"
          }
        }
      }
    }
  }
}

Другие вопросы по теме