Elasticsearch: la definición del mapeo raíz tiene parámetros no admitidos index: not_analyzed

81

Hola a todos, estoy intentando crear una prueba de esquema.

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
    }
}

Estoy teniendo el siguiente error

{
    "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
}

Ayúdame a resolver este error

Ramesh
fuente

Respuestas:

122

Ya casi estás aquí, solo te faltan algunas cosas:

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": {
     ...
  }
}

ACTUALIZAR

Si su índice ya existe, también puede modificar sus asignaciones de esta manera:

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"
        }
    }
}

ACTUALIZAR :

A partir de ES 7, se eliminaron los tipos de mapeo. Puedes leer más detalles aquí

Val
fuente
Gracias . ¿Es posible crear un mapeo sin typename. Quiero insertar datos sin typename Algo como {field1, field2 ....} Y no como typeName {field1, field2 ...}
Ramesh
1
Bien aquí ¿Qué es prueba y qué es type_name?
Ramesh
6
testes su nombre de índice y type_namees el nombre de su tipo de mapeo.
Val
2
copia pegado este código. da error: "tipo": "mapper_parsing_exception", "razón": "La definición del mapeo raíz tiene parámetros no admitidos: [type_name: {properties = {field1 = {type = integer}, field4, = {search_analyzer = standard, analyzer = autocomplete , tipo = cadena}, campo3 = {índice = no_analizado, tipo = cadena}, campo2 = {tipo = entero}}}] "
Ramesh Pareek
1
Para mí, type_nameno está funcionando. Estoy usando elasticsearch-oss: imagen de ventana acoplable 7.20
Sebastialonso
21

Espero que la respuesta anterior funcione para la búsqueda elástica <7.0, pero en 7.0 no podemos especificar el tipo de documento y ya no es compatible. Y en ese caso, si especificamos el tipo de documento, obtenemos un error similar.

Está utilizando Elastic Search 7.0 y la última versión de Nest C # (6.6). Hay algunos cambios importantes con ES 7.0 que están causando este problema. Esto se debe a que no podemos especificar el tipo de documento y en la versión 6.6 de NEST están usando doctype. Entonces, para resolver eso hasta que se lance NEST 7.0, necesitamos descargar su paquete beta

Consulte este enlace para solucionarlo.

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

EDITAR: NEST 7.0 ya está disponible. NEST 7.0 funciona con Elastic 7.0. Consulte las notas de la versión aquí para obtener más detalles.

Pavan Kumar Aryasomayajulu
fuente
7

Comprueba tu versión de Elastic.

Tuve estos problemas porque estaba mirando la documentación de la versión incorrecta.

ingrese la descripción de la imagen aquí

qarly_blue
fuente
4

A partir de ES 7, se eliminaron los tipos de mapeo. Puedes leer más detallesaquí

Si está utilizando Ruby On Rails, esto significa que es posible que deba eliminarlo document_typede su modelo o problema.

Como alternativa a los tipos de mapeo, una solución es utilizar un índice por tipo de documento.

Antes de:

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

Después:

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
nulo
fuente
¡Exactamente mi problema! Me alegro de que haya sido una solución fácil después de pasar 2 horas leyendo documentos sobre esto.
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
    }
}

Aquí hay un comando similar que sé que funciona:

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

El desglose del comando curl anterior es:

PUT /manzanaIndex
{
    "mappings":{
        "properties":{
                "city":{
                    "type": "text"
                }
        }
    }
}
Gene
fuente