Elasticsearch: Die Root-Mapping-Definition hat einen nicht unterstützten Parameterindex: not_analyzed

79

Hallo zusammen, ich versuche, einen Schematest zu erstellen.

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

Ich erhalte den folgenden Fehler

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

Bitte helfen Sie mir, diesen Fehler zu beheben

Ramesh
quelle

Antworten:

118

Du bist fast da, dir fehlen nur ein paar Dinge:

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

AKTUALISIEREN

Wenn Ihr Index bereits vorhanden ist, können Sie Ihre Zuordnungen auch folgendermaßen ändern:

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

UPDATE :

Ab ES 7 wurden Zuordnungstypen entfernt. Weitere Details können Sie hier lesen

Val
quelle
Vielen Dank . Ist es möglich, ein Mapping ohne Typnamen zu erstellen? Ich möchte Daten ohne Typnamen einfügen. Etwas wie {Feld1, Feld2 ....} Und nicht wie Typname {Feld1, Feld2 ...}
Ramesh
1
Okay hier Was ist Test und was ist Typname?
Ramesh
6
testist Ihr Indexname und type_nameder Name Ihres Zuordnungstyps.
Val
2
Kopieren Sie diesen Code eingefügt. Es wird ein Fehler ausgegeben: "type": "mapper_parsing_exception", "reason": "Die Root-Mapping-Definition hat nicht unterstützte Parameter: [type_name: {properties = {field1 = {type = integer}, field4, = {search_analyzer = standard, analyzer = autocomplete , type = string}, field3 = {index = not_analyzed, type = string}, field2 = {type = integer}}}] "
Ramesh Pareek
1
Bei mir type_namefunktioniert das nicht. Ich benutze das Docker-Bild elasticsearch-oss: 7.20
Sebastialonso
19

Ich hoffe, dass die obige Antwort für die elastische Suche <7.0 funktioniert, aber in 7.0 können wir den Dokumenttyp nicht angeben und sie wird nicht mehr unterstützt. In diesem Fall erhalten wir einen ähnlichen Fehler, wenn wir den Dokumenttyp angeben.

Wenn Sie Elastic Search 7.0 und die neueste Version von Nest C # (6.6) verwenden. Mit ES 7.0 gibt es einige wichtige Änderungen, die dieses Problem verursachen. Dies liegt daran, dass wir den Dokumenttyp nicht angeben können und in der Version 6.6 von NEST doctype verwenden. Um dieses Problem zu lösen, bis NEST 7.0 veröffentlicht wird, müssen wir das Beta-Paket herunterladen

Bitte gehen Sie über diesen Link, um das Problem zu beheben

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

BEARBEITEN: NEST 7.0 ist jetzt veröffentlicht. NEST 7.0 funktioniert mit Elastic 7.0. Weitere Informationen finden Sie in den Versionshinweisen hier .

Pavan Kumar Aryasomayajulu
quelle
7

Überprüfen Sie Ihre elastische Version.

Ich hatte dieses Problem, weil ich mir die Dokumentation der falschen Version angesehen habe.

Geben Sie hier die Bildbeschreibung ein

qarly_blue
quelle
3

Ab ES 7 wurden Zuordnungstypen entfernt. Weitere Details können Sie hier lesen

Wenn Sie Ruby On Rails verwenden, bedeutet dies, dass Sie möglicherweise document_typeaus Ihrem Modell oder Unternehmen entfernen müssen .

Alternativ zu Mapping-Typen besteht eine Lösung darin, einen Index pro Dokumenttyp zu verwenden.

Vor:

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

Nach:

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
Null
quelle
Genau mein Problem! Ich bin froh, dass es eine einfache Lösung war, nachdem ich 2 Stunden damit verbracht hatte, Dokumente darüber zu lesen.
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
    }
}

Hier ist ein ähnlicher Befehl, von dem ich weiß, dass er funktioniert:

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

Die Aufteilung für den obigen Curl-Befehl lautet:

PUT /manzanaIndex
{
    "mappings":{
        "properties":{
                "city":{
                    "type": "text"
                }
        }
    }
}
Gen
quelle