Как обновить ElasticSearch с 6.8 до 7.X с помощью Ruby on Rails - PullRequest
0 голосов
/ 28 июня 2019

У меня есть приложение Rails, использующее сервер ElasticSearch, оба они находятся в соответствующем Docker Image.

Я бы хотел обновить свой сервер ElasticSearch. На самом деле я использую image: docker.elastic.co/elasticsearch/elasticsearch:6.8.1, и я хотел бы обновить его до 7.X

В версии 7 я получаю эту ошибку при перестройке индекса:

{
  "error": {
    "root_cause": [
      {
        "type": "mapper_parsing_exception",
        "reason": "Root mapping definition has unsupported parameters:  [listing : {dynamic=true, properties={uid={analyzer=id_analyzer, type=text}, bee_id={analyzer=id_analyzer, type=text}, address={analyzer=address_analyzer, type=text}, location={type=geo_point}}}]"
      }
    ],
    "type": "mapper_parsing_exception",
    "reason": "Failed to parse mapping [_doc]: Root mapping definition has unsupported parameters:  [listing : {dynamic=true, properties={uid={analyzer=id_analyzer, type=text}, bee_id={analyzer=id_analyzer, type=text}, address={analyzer=address_analyzer, type=text}, location={type=geo_point}}}]",
    "caused_by": {
      "type": "mapper_parsing_exception",
      "reason": "Root mapping definition has unsupported parameters:  [listing : {dynamic=true, properties={uid={analyzer=id_analyzer, type=text}, bee_id={analyzer=id_analyzer, type=text}, address={analyzer=address_analyzer, type=text}, location={type=geo_point}}}]"
    }
  },
  "status": 400
}

Я знаю, что ошибка вызвана критическим изменением, но я не знаю, как это исправить.

Я использую gem elasticsearch-model:

Мое определение выглядит так:

      settings :analysis => {
        char_filter: {
          dash_remover: {
            type: "mapping",
            mappings: ["-=>"]
          }
        },
        filter: {
          english_stemmer: {
            type:       "stemmer",
            language:   "english"
          }
        },
        tokenizer: {
          id_tokenizer: {
            type: "ngram",
            min_gram: 3,
            max_gram: 3,
            token_chars: ["letter", "digit"]
          },
          address_tokenizer: {
              type: "edgeNGram",
              min_gram: 3,
              max_gram: 3,
              token_chars: ["letter", "digit"]
          }
        },
        analyzer: {
          description_analyzer: {
            type: 'custom',
            tokenizer: 'standard',
            filter: ['asciifolding', 'lowercase']
          },
          id_analyzer: {
            tokenizer: "id_tokenizer",
            char_filter: ["dash_remover"],
            filter: ['asciifolding', 'lowercase']
          },
          english_description_analyzer: {
            tokenizer: "whitespace",
            char_filter: ["html_strip"],
            filter: ['asciifolding', 'lowercase', "english_stemmer"]
          },
          address_analyzer: {
            tokenizer: "address_tokenizer",
            filter: ['asciifolding', 'lowercase']
          },
        }
      }
      mappings dynamic: true do
        indexes :location, :type => 'geo_point'
        indexes :uid,     :analyzer => 'id_analyzer'
        indexes :bee_id,  :analyzer => 'id_analyzer'
        indexes :address, :analyzer => 'address_analyzer'
      end
    end

Какие изменения я должен применить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...