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

81

Привет всем, я пытаюсь создать схему Test.

PUT /test
{
    "mappings": {
        "field1": {
            "type": "integer"
        },
        "field2": {  
            "type": "integer"
        },
        "field3": {
            "type": "string",
            "index": "not_analyzed"
        },
        "field4": {
            "type": "string",
            "analyzer": "autocomplete",
            "search_analyzer": "standard"
        }
    },
    "settings": {
        bla
        bla
        bla
    }
}

Я получаю следующую ошибку

{
    "error": {
        "root_cause": [{
            "type": "mapper_parsing_exception",
            "reason": "Root mapping definition has unsupported parameters: [index : not_analyzed] [type : string]"
        }],
        "type": "mapper_parsing_exception",
        "reason": "Failed to parse mapping [featured]: Root mapping definition has unsupported parameters:  [index : not_analyzed] [type : string]",
        "caused_by": {
            "type": "mapper_parsing_exception",
            "reason": "Root mapping definition has unsupported parameters:  [index : not_analyzed] [type : string]"
        }
    },
    "status": 400
}

Пожалуйста, помогите мне разрешить эту ошибку

Рамеш
источник

Ответы:

122

Вы почти здесь, вам просто не хватает нескольких вещей:

PUT /test
{
  "mappings": {
    "type_name": {                <--- add the type name
      "properties": {             <--- enclose all field definitions in "properties"
        "field1": {
          "type": "integer"
        },
        "field2": {
          "type": "integer"
        },
        "field3": {
          "type": "string",
          "index": "not_analyzed"
        },
        "field4,": {
          "type": "string",
          "analyzer": "autocomplete",
          "search_analyzer": "standard"
        }
      }
    }
  },
  "settings": {
     ...
  }
}

ОБНОВИТЬ

Если ваш индекс уже существует, вы также можете изменить свои сопоставления следующим образом:

PUT test/_mapping/type_name
{
    "properties": {             <--- enclose all field definitions in "properties"
        "field1": {
          "type": "integer"
        },
        "field2": {
          "type": "integer"
        },
        "field3": {
          "type": "string",
          "index": "not_analyzed"
        },
        "field4,": {
          "type": "string",
          "analyzer": "autocomplete",
          "search_analyzer": "standard"
        }
    }
}

ОБНОВЛЕНИЕ :

Начиная с ES 7, типы сопоставления были удалены. Вы можете прочитать больше здесь

Вал
источник
Благодарю . Можно ли создать отображение без имени типа. Я хочу вставить данные без typename Что-то вроде {field1, field2 ....} А не typeName {field1, field2 ...}
Рамеш
1
Хорошо, вот что такое тест и что такое type_name?
Рамеш
6
test- это имя вашего индекса и type_nameимя вашего типа сопоставления.
Val
2
скопировать вставил этот код. выдает ошибку: "type": "mapper_parsing_exception", "reason": "Определение корневого сопоставления имеет неподдерживаемые параметры: [type_name: {properties = {field1 = {type = integer}, field4, = {search_analyzer = standard, analyzer = autocomplete]» , type = string}, field3 = {index = not_analyzed, type = string}, field2 = {type = integer}}}] "
Рамеш Парик
1
Для меня type_nameэто не работает. Я использую изображение докера elasticsearch-oss: 7.20
Sebastialonso
21

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

Если вы используете эластичный поиск 7.0 и последнюю версию Nest C # (6.6). В ES 7.0 есть критические изменения, которые вызывают эту проблему. Это связано с тем, что мы не можем указать тип документа, а в версии 6.6 NEST используется doctype. Итак, чтобы решить эту проблему до выпуска NEST 7.0, нам нужно загрузить их бета-пакет.

Пожалуйста, пройдите по этой ссылке, чтобы исправить это

https://xyzcoder.github.io/elasticsearch/nest/2019/04/12/es-70-and-nest-mapping-error.html

РЕДАКТИРОВАТЬ: NEST 7.0 выпущен. NEST 7.0 работает с Elastic 7.0. Подробнее см. Примечания к выпуску .

Паван Кумар Арьясомаяджулу
источник
7

Проверьте свою версию Elastic.

У меня возникла эта проблема, потому что я просматривал документацию по неверной версии.

введите описание изображения здесь

qarly_blue
источник
4

Начиная с ES 7, типы сопоставления были удалены. Вы можете прочитать больше здесь

Если вы используете Ruby On Rails, это означает, что вам может потребоваться удалить его document_typeиз своей модели или проблемы.

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

До:

module Searchable
  extend ActiveSupport::Concern

  included do
    include Elasticsearch::Model
    include Elasticsearch::Model::Callbacks
    index_name [Rails.env, Rails.application.class.module_parent_name.underscore].join('_')
    document_type self.name.downcase
  end
end

После:

module Searchable
  extend ActiveSupport::Concern

  included do
    include Elasticsearch::Model
    include Elasticsearch::Model::Callbacks
    index_name [Rails.env, Rails.application.class.module_parent_name.underscore, self.name.downcase].join('_')
  end
end
ноль
источник
Собственно моя проблема! Рад, что это было легко исправить, потратив 2 часа на чтение документации.
bkunzi01
0
PUT /testIndex
{
    "mappings": {
        "properties": {     <--ADD THIS
            "field1": {
                "type": "integer"
            },
            "field2": {  
                "type": "integer"
            },
            "field3": {
                "type": "string",
                "index": "not_analyzed"
            },
            "field4": {
                "type": "string",
                "analyzer": "autocomplete",
                "search_analyzer": "standard"
            }
        }
    },
    "settings": {
        bla
        bla
        bla
    }
}

Вот похожая команда, которую я знаю, работает:

curl -v -H "Content-Type: application/json" -H "Authorization: Basic cGC3COJ1c2Vy925hZGFJbXBvcnABCnRl" -X PUT -d '{"mappings":{"properties":{"city":{"type": "text"}}}}' https://35.80.2.21/manzanaIndex

Разбивка приведенной выше команды curl:

PUT /manzanaIndex
{
    "mappings":{
        "properties":{
                "city":{
                    "type": "text"
                }
        }
    }
}
Ген
источник